This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)
Confirmatory hypotheses (as specified in preregistration)
NOTE: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.
ALSO NOTE: I included only the second sample of Ghanaian participants, who were recruited according to our standards and as specified in the preregistration. For the most part, all results are the same when including the full, “double” sample of Ghanaian participants.
ALSO NOTE: In Thailand this packet was missing one question on the Porosity (Dulin) scale. I have rescaled Thai participants’ Porosity scores to run from 0-32 in order to match the other sites.
Hypothesis #1
Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.03 |
0.03 |
495 |
1.12 |
0.263 |
|
| abs |
0.21 |
0.03 |
495 |
6.55 |
<0.001 |
* |
| p7_ctry1 |
-0.32 |
0.06 |
495 |
-5.44 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.06 |
495 |
13.58 |
<0.001 |
* |
| p7_ctry3 |
-0.11 |
0.06 |
495 |
-1.78 |
0.075 |
|
| p7_ctry4 |
-0.95 |
0.06 |
495 |
-15.26 |
<0.001 |
* |
| scale1 |
0.00 |
0.02 |
495 |
-0.17 |
0.863 |
|
| abs:p7_ctry1 |
0.04 |
0.05 |
495 |
0.72 |
0.474 |
|
| abs:p7_ctry2 |
-0.01 |
0.07 |
495 |
-0.18 |
0.86 |
|
| abs:p7_ctry3 |
0.12 |
0.07 |
495 |
1.79 |
0.073 |
|
| abs:p7_ctry4 |
-0.04 |
0.07 |
495 |
-0.60 |
0.551 |
|
| abs:scale1 |
-0.03 |
0.02 |
495 |
-1.52 |
0.129 |
|
| p7_ctry1:scale1 |
-0.06 |
0.03 |
495 |
-1.86 |
0.064 |
|
| p7_ctry2:scale1 |
0.04 |
0.03 |
495 |
1.14 |
0.255 |
|
| p7_ctry3:scale1 |
0.07 |
0.04 |
495 |
1.99 |
0.047 |
* |
| p7_ctry4:scale1 |
-0.18 |
0.04 |
495 |
-4.90 |
<0.001 |
* |
| abs:p7_ctry1:scale1 |
-0.03 |
0.03 |
495 |
-0.88 |
0.381 |
|
| abs:p7_ctry2:scale1 |
-0.03 |
0.04 |
495 |
-0.68 |
0.499 |
|
| abs:p7_ctry3:scale1 |
0.00 |
0.04 |
495 |
-0.01 |
0.992 |
|
| abs:p7_ctry4:scale1 |
0.04 |
0.04 |
495 |
0.87 |
0.387 |
|
We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.21 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 3.46 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.16 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2
Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.07 |
0.04 |
495 |
1.79 |
0.074 |
|
| por |
0.37 |
0.04 |
495 |
10.19 |
<0.001 |
* |
| p7_ctry1 |
-0.18 |
0.06 |
495 |
-2.97 |
0.003 |
* |
| p7_ctry2 |
0.59 |
0.07 |
495 |
8.75 |
<0.001 |
* |
| p7_ctry3 |
-0.20 |
0.06 |
495 |
-3.38 |
<0.001 |
* |
| p7_ctry4 |
-0.58 |
0.08 |
495 |
-7.16 |
<0.001 |
* |
| scale1 |
0.01 |
0.02 |
495 |
0.40 |
0.687 |
|
| por:p7_ctry1 |
0.20 |
0.06 |
495 |
3.34 |
<0.001 |
* |
| por:p7_ctry2 |
-0.07 |
0.06 |
495 |
-1.10 |
0.274 |
|
| por:p7_ctry3 |
-0.02 |
0.07 |
495 |
-0.23 |
0.816 |
|
| por:p7_ctry4 |
0.05 |
0.08 |
495 |
0.60 |
0.548 |
|
| por:scale1 |
0.00 |
0.02 |
495 |
0.14 |
0.888 |
|
| p7_ctry1:scale1 |
-0.08 |
0.04 |
495 |
-2.08 |
0.038 |
* |
| p7_ctry2:scale1 |
0.10 |
0.04 |
495 |
2.43 |
0.015 |
* |
| p7_ctry3:scale1 |
0.07 |
0.04 |
495 |
1.94 |
0.052 |
|
| p7_ctry4:scale1 |
-0.12 |
0.05 |
495 |
-2.34 |
0.019 |
* |
| por:p7_ctry1:scale1 |
-0.03 |
0.04 |
495 |
-0.75 |
0.453 |
|
| por:p7_ctry2:scale1 |
-0.14 |
0.04 |
495 |
-3.31 |
0.001 |
* |
| por:p7_ctry3:scale1 |
-0.01 |
0.04 |
495 |
-0.16 |
0.875 |
|
| por:p7_ctry4:scale1 |
0.08 |
0.05 |
495 |
1.62 |
0.105 |
|
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.06 |
0.03 |
495 |
1.94 |
0.053 |
|
| mm |
0.26 |
0.03 |
495 |
7.60 |
<0.001 |
* |
| p7_ctry1 |
-0.18 |
0.06 |
495 |
-2.95 |
0.003 |
* |
| p7_ctry2 |
0.66 |
0.06 |
495 |
10.31 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.06 |
495 |
-4.58 |
<0.001 |
* |
| p7_ctry4 |
-0.75 |
0.07 |
495 |
-10.67 |
<0.001 |
* |
| scale1 |
0.01 |
0.02 |
495 |
0.39 |
0.693 |
|
| mm:p7_ctry1 |
0.20 |
0.06 |
495 |
3.57 |
<0.001 |
* |
| mm:p7_ctry2 |
-0.07 |
0.06 |
495 |
-1.20 |
0.23 |
|
| mm:p7_ctry3 |
-0.01 |
0.06 |
495 |
-0.14 |
0.888 |
|
| mm:p7_ctry4 |
0.05 |
0.08 |
495 |
0.64 |
0.521 |
|
| mm:scale1 |
-0.04 |
0.02 |
495 |
-2.14 |
0.033 |
* |
| p7_ctry1:scale1 |
-0.11 |
0.04 |
495 |
-3.11 |
0.002 |
* |
| p7_ctry2:scale1 |
0.10 |
0.04 |
495 |
2.66 |
0.008 |
* |
| p7_ctry3:scale1 |
0.07 |
0.03 |
495 |
2.10 |
0.036 |
* |
| p7_ctry4:scale1 |
-0.17 |
0.04 |
495 |
-3.96 |
<0.001 |
* |
| mm:p7_ctry1:scale1 |
-0.06 |
0.03 |
495 |
-1.83 |
0.068 |
|
| mm:p7_ctry2:scale1 |
-0.09 |
0.04 |
495 |
-2.48 |
0.014 |
* |
| mm:p7_ctry3:scale1 |
0.01 |
0.04 |
495 |
0.28 |
0.778 |
|
| mm:p7_ctry4:scale1 |
0.08 |
0.05 |
495 |
1.60 |
0.111 |
|
In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.37 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.48 points on the Porosity scale (range: 0-32), participants (on average) increased by 6.26 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.73 points on the Spiritual Events scale (range: 0-80).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.26 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 4.36 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.99 points on the Spiritual Events scale (range: 0-80).


Hypothesis #3
Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.09 |
100 |
0.00 |
1 |
|
| abs |
0.30 |
0.09 |
100 |
3.40 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| abs:scale1 |
-0.06 |
0.04 |
100 |
-1.67 |
0.097 |
|
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| abs |
0.20 |
0.08 |
98 |
2.42 |
0.017 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.06 |
98 |
-0.06 |
0.955 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.40 |
0.08 |
109 |
5.31 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| abs:scale1 |
-0.03 |
0.05 |
109 |
-0.61 |
0.546 |
|
| China |
| (Intercept) |
0.00 |
0.09 |
98 |
0.00 |
1 |
|
| abs |
0.26 |
0.09 |
98 |
3.00 |
0.003 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.04 |
98 |
-0.41 |
0.684 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.15 |
0.08 |
90 |
1.74 |
0.085 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
0.01 |
0.06 |
90 |
0.14 |
0.892 |
|
We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)
Hypothesis #4
Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
100 |
7.30 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| por:scale1 |
-0.02 |
0.04 |
100 |
-0.49 |
0.628 |
|
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| por |
0.29 |
0.08 |
98 |
3.64 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
-0.06 |
0.06 |
98 |
-1.04 |
0.303 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.41 |
0.07 |
109 |
5.52 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.00 |
0.05 |
109 |
0.10 |
0.917 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
98 |
7.34 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.05 |
0.04 |
98 |
1.14 |
0.257 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.19 |
0.08 |
90 |
2.25 |
0.027 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
0.11 |
0.06 |
90 |
1.83 |
0.07 |
|
Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.08 |
100 |
0.00 |
1 |
|
| mm |
0.49 |
0.08 |
100 |
6.36 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| mm:scale1 |
-0.11 |
0.04 |
100 |
-2.93 |
0.004 |
* |
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.20 |
0.08 |
98 |
2.42 |
0.017 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
-0.10 |
0.06 |
98 |
-1.88 |
0.062 |
|
| Thailand |
| (Intercept) |
0.00 |
0.08 |
109 |
0.00 |
1 |
|
| mm |
0.33 |
0.08 |
109 |
4.17 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| mm:scale1 |
-0.04 |
0.05 |
109 |
-0.83 |
0.411 |
|
| China |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.38 |
0.08 |
98 |
4.68 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.00 |
0.04 |
98 |
0.04 |
0.968 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.09 |
90 |
0.00 |
1 |
|
| mm |
0.09 |
0.09 |
90 |
1.07 |
0.288 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
0.03 |
0.06 |
90 |
0.48 |
0.632 |
|
Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)
Secondary exploratory analyses
“Secular” experiences
From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”
Parallel to Hypothesis #1
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.01 |
0.03 |
495 |
0.34 |
0.731 |
|
| abs |
0.36 |
0.03 |
495 |
10.70 |
<0.001 |
* |
| p7_ctry1 |
0.14 |
0.06 |
495 |
2.26 |
0.025 |
* |
| p7_ctry2 |
0.24 |
0.06 |
495 |
3.74 |
<0.001 |
* |
| p7_ctry3 |
-0.05 |
0.07 |
495 |
-0.74 |
0.457 |
|
| p7_ctry4 |
-0.23 |
0.07 |
495 |
-3.44 |
<0.001 |
* |
| scale1 |
0.00 |
0.03 |
495 |
0.06 |
0.949 |
|
| abs:p7_ctry1 |
0.10 |
0.06 |
495 |
1.83 |
0.068 |
|
| abs:p7_ctry2 |
-0.05 |
0.07 |
495 |
-0.75 |
0.451 |
|
| abs:p7_ctry3 |
0.06 |
0.07 |
495 |
0.79 |
0.431 |
|
| abs:p7_ctry4 |
0.04 |
0.07 |
495 |
0.50 |
0.617 |
|
| abs:scale1 |
-0.01 |
0.03 |
495 |
-0.36 |
0.722 |
|
| p7_ctry1:scale1 |
-0.25 |
0.05 |
495 |
-4.79 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.09 |
0.05 |
495 |
-1.62 |
0.107 |
|
| p7_ctry3:scale1 |
0.19 |
0.06 |
495 |
3.37 |
<0.001 |
* |
| p7_ctry4:scale1 |
0.08 |
0.06 |
495 |
1.41 |
0.16 |
|
| abs:p7_ctry1:scale1 |
0.00 |
0.05 |
495 |
0.00 |
0.999 |
|
| abs:p7_ctry2:scale1 |
-0.05 |
0.06 |
495 |
-0.85 |
0.398 |
|
| abs:p7_ctry3:scale1 |
0.04 |
0.06 |
495 |
0.71 |
0.481 |
|
| abs:p7_ctry4:scale1 |
0.01 |
0.06 |
495 |
0.11 |
0.914 |
|
In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.36 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.16 points on the Uncommon Events scale (range: 0-18) or 0.73 points on the Extrasensory scale (range: 0-7).
This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.36 vs. b = 0.21). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.10 |
0.04 |
495 |
2.40 |
0.017 |
* |
| por |
0.45 |
0.04 |
495 |
10.66 |
<0.001 |
* |
| p7_ctry1 |
0.24 |
0.07 |
495 |
3.39 |
<0.001 |
* |
| p7_ctry2 |
0.04 |
0.08 |
495 |
0.57 |
0.57 |
|
| p7_ctry3 |
-0.25 |
0.07 |
495 |
-3.61 |
<0.001 |
* |
| p7_ctry4 |
0.39 |
0.09 |
495 |
4.16 |
<0.001 |
* |
| scale1 |
0.10 |
0.04 |
495 |
2.76 |
0.006 |
* |
| por:p7_ctry1 |
0.24 |
0.07 |
495 |
3.47 |
<0.001 |
* |
| por:p7_ctry2 |
-0.28 |
0.07 |
495 |
-3.72 |
<0.001 |
* |
| por:p7_ctry3 |
-0.10 |
0.08 |
495 |
-1.25 |
0.213 |
|
| por:p7_ctry4 |
0.26 |
0.09 |
495 |
2.91 |
0.004 |
* |
| por:scale1 |
0.14 |
0.03 |
495 |
3.95 |
<0.001 |
* |
| p7_ctry1:scale1 |
-0.33 |
0.06 |
495 |
-5.73 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.19 |
0.06 |
495 |
-3.06 |
0.002 |
* |
| p7_ctry3:scale1 |
0.14 |
0.06 |
495 |
2.39 |
0.017 |
* |
| p7_ctry4:scale1 |
0.36 |
0.08 |
495 |
4.69 |
<0.001 |
* |
| por:p7_ctry1:scale1 |
-0.09 |
0.06 |
495 |
-1.49 |
0.138 |
|
| por:p7_ctry2:scale1 |
-0.12 |
0.06 |
495 |
-1.89 |
0.059 |
|
| por:p7_ctry3:scale1 |
0.07 |
0.06 |
495 |
1.05 |
0.296 |
|
| por:p7_ctry4:scale1 |
0.33 |
0.07 |
495 |
4.50 |
<0.001 |
* |
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.09 |
0.04 |
495 |
2.53 |
0.012 |
* |
| mm |
0.31 |
0.04 |
495 |
7.92 |
<0.001 |
* |
| p7_ctry1 |
0.27 |
0.07 |
495 |
3.85 |
<0.001 |
* |
| p7_ctry2 |
0.05 |
0.07 |
495 |
0.65 |
0.515 |
|
| p7_ctry3 |
-0.30 |
0.06 |
495 |
-4.64 |
<0.001 |
* |
| p7_ctry4 |
0.10 |
0.08 |
495 |
1.29 |
0.198 |
|
| scale1 |
0.05 |
0.03 |
495 |
1.56 |
0.118 |
|
| mm:p7_ctry1 |
0.29 |
0.06 |
495 |
4.48 |
<0.001 |
* |
| mm:p7_ctry2 |
-0.12 |
0.07 |
495 |
-1.83 |
0.067 |
|
| mm:p7_ctry3 |
-0.08 |
0.07 |
495 |
-1.07 |
0.284 |
|
| mm:p7_ctry4 |
0.22 |
0.10 |
495 |
2.27 |
0.023 |
* |
| mm:scale1 |
0.06 |
0.03 |
495 |
1.85 |
0.065 |
|
| p7_ctry1:scale1 |
-0.30 |
0.06 |
495 |
-5.29 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.08 |
0.06 |
495 |
-1.39 |
0.165 |
|
| p7_ctry3:scale1 |
0.15 |
0.05 |
495 |
2.80 |
0.005 |
* |
| p7_ctry4:scale1 |
0.19 |
0.07 |
495 |
2.93 |
0.004 |
* |
| mm:p7_ctry1:scale1 |
-0.06 |
0.05 |
495 |
-1.09 |
0.276 |
|
| mm:p7_ctry2:scale1 |
-0.15 |
0.05 |
495 |
-2.69 |
0.007 |
* |
| mm:p7_ctry3:scale1 |
0.05 |
0.06 |
495 |
0.92 |
0.356 |
|
| mm:p7_ctry4:scale1 |
0.24 |
0.08 |
495 |
3.11 |
0.002 |
* |
In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.45 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.48 points on the Porosity scale (range: 0-32), participants (on average) increased by 1.43 points on the Uncommon Events scale (range: 0-18) or 0.9 points on the Extrasensory scale (range: 0-7).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.31 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 0.99 points on the Uncommon Events scale (range: 0-18) or 0.62 points on the Extrasensory scale (range: 0-7).
These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.45 vs. b = 0.37; Martha Story: b = 0.31 vs. b = 0.26). We did not provide a prediction about whether or not this would be the case in the preregistration.


Parallel to Hypothesis #3
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| abs |
0.46 |
0.07 |
100 |
6.50 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.05 |
100 |
0.09 |
0.93 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.28 |
0.07 |
98 |
4.02 |
<0.001 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.04 |
0.07 |
98 |
-0.55 |
0.583 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.41 |
0.07 |
109 |
6.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
109 |
0.00 |
1 |
|
| abs:scale1 |
0.02 |
0.06 |
109 |
0.40 |
0.693 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.36 |
0.07 |
98 |
5.12 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.07 |
0.06 |
98 |
-1.13 |
0.263 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.27 |
0.08 |
90 |
3.37 |
0.001 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.06 |
90 |
-0.37 |
0.709 |
|
In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)
Parallel to Hypothesis #4
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.53 |
0.07 |
100 |
8.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| por:scale1 |
0.06 |
0.05 |
100 |
1.07 |
0.286 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.15 |
0.07 |
98 |
2.10 |
0.038 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.03 |
0.07 |
98 |
0.41 |
0.685 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.32 |
0.07 |
109 |
4.37 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.18 |
0.05 |
109 |
3.37 |
0.001 |
* |
| China |
| (Intercept) |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por |
0.46 |
0.06 |
98 |
7.13 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.25 |
0.06 |
98 |
4.31 |
<0.001 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.23 |
0.08 |
90 |
2.80 |
0.006 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
-0.05 |
0.06 |
90 |
-0.87 |
0.384 |
|
In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| mm |
0.52 |
0.07 |
100 |
7.82 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| mm:scale1 |
0.02 |
0.05 |
100 |
0.35 |
0.726 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.19 |
0.07 |
98 |
2.66 |
0.009 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm:scale1 |
-0.08 |
0.07 |
98 |
-1.18 |
0.242 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| mm |
0.24 |
0.07 |
109 |
3.16 |
0.002 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| mm:scale1 |
0.11 |
0.05 |
109 |
2.02 |
0.046 |
* |
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.33 |
0.07 |
98 |
4.58 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.14 |
0.06 |
98 |
2.30 |
0.024 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| mm |
0.01 |
0.08 |
90 |
0.06 |
0.95 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
-0.03 |
0.06 |
90 |
-0.47 |
0.636 |
|
In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)
“Control” scales (Hypothesis #5)
From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”
Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.
NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.95 |
0.052 |
|
| score |
0.17 |
0.02 |
9.58 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.97 |
0.049 |
* |
| predictorabs_pmm |
-0.01 |
0.01 |
-1.01 |
0.311 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.11 |
0.913 |
|
| predictorhthk_wob |
0.03 |
0.03 |
0.95 |
0.343 |
|
| p7_ctry1 |
-0.37 |
0.03 |
-11.99 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.03 |
25.31 |
<0.001 |
* |
| p7_ctry3 |
-0.12 |
0.03 |
-3.41 |
<0.001 |
* |
| p7_ctry4 |
-0.96 |
0.03 |
-28.53 |
<0.001 |
* |
| score:predictorint_ctl |
0.04 |
0.01 |
5.54 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.01 |
-2.71 |
0.007 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.86 |
0.004 |
* |
| score:predictorhthk_wob |
0.02 |
0.03 |
0.72 |
0.473 |
|
| score:p7_ctry1 |
0.11 |
0.03 |
3.67 |
<0.001 |
* |
| score:p7_ctry2 |
-0.06 |
0.03 |
-1.75 |
0.08 |
|
| score:p7_ctry3 |
0.02 |
0.04 |
0.50 |
0.616 |
|
| score:p7_ctry4 |
0.02 |
0.04 |
0.56 |
0.579 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.18 |
0.03 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.03 |
0.03 |
-1.32 |
0.187 |
|
| predictorpor_mm:p7_ctry1 |
0.01 |
0.05 |
0.30 |
0.761 |
|
| predictorhthk_wob:p7_ctry1 |
0.02 |
0.05 |
0.38 |
0.7 |
|
| predictorint_ctl:p7_ctry2 |
-0.01 |
0.01 |
-1.02 |
0.306 |
|
| predictorabs_pmm:p7_ctry2 |
0.04 |
0.03 |
1.33 |
0.183 |
|
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.05 |
-0.68 |
0.499 |
|
| predictorhthk_wob:p7_ctry2 |
0.01 |
0.05 |
0.30 |
0.763 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.07 |
0.941 |
|
| predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.48 |
0.139 |
|
| predictorpor_mm:p7_ctry3 |
0.03 |
0.05 |
0.64 |
0.524 |
|
| predictorhthk_wob:p7_ctry3 |
0.01 |
0.07 |
0.14 |
0.885 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.48 |
0.139 |
|
| predictorabs_pmm:p7_ctry4 |
-0.10 |
0.03 |
-3.50 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.11 |
0.06 |
1.78 |
0.075 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.91 |
0.361 |
|
| score:predictorint_ctl:p7_ctry1 |
0.00 |
0.01 |
0.08 |
0.937 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.02 |
-2.03 |
0.042 |
* |
| score:predictorpor_mm:p7_ctry1 |
0.02 |
0.05 |
0.39 |
0.693 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.07 |
0.05 |
-1.46 |
0.145 |
|
| score:predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.08 |
0.002 |
* |
| score:predictorabs_pmm:p7_ctry2 |
0.05 |
0.03 |
1.72 |
0.085 |
|
| score:predictorpor_mm:p7_ctry2 |
-0.03 |
0.05 |
-0.52 |
0.604 |
|
| score:predictorhthk_wob:p7_ctry2 |
-0.08 |
0.05 |
-1.64 |
0.101 |
|
| score:predictorint_ctl:p7_ctry3 |
0.01 |
0.01 |
0.48 |
0.63 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.47 |
0.141 |
|
| score:predictorpor_mm:p7_ctry3 |
-0.01 |
0.05 |
-0.24 |
0.813 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.04 |
0.06 |
0.59 |
0.558 |
|
| score:predictorint_ctl:p7_ctry4 |
0.03 |
0.02 |
2.15 |
0.031 |
* |
| score:predictorabs_pmm:p7_ctry4 |
-0.05 |
0.03 |
-1.41 |
0.159 |
|
| score:predictorpor_mm:p7_ctry4 |
0.00 |
0.06 |
-0.05 |
0.964 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.05 |
0.06 |
0.81 |
0.419 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.05 |
0.02 |
2.55 |
0.011 |
* |
| score |
0.18 |
0.02 |
8.66 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.01 |
-0.03 |
0.972 |
|
| predictorabs_pmm |
-0.01 |
0.02 |
-0.38 |
0.701 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.03 |
0.972 |
|
| predictorhthk_wob |
-0.02 |
0.03 |
-0.57 |
0.57 |
|
| p7_ctry1 |
-0.20 |
0.04 |
-5.55 |
<0.001 |
* |
| p7_ctry2 |
0.67 |
0.04 |
18.22 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.04 |
-6.36 |
<0.001 |
* |
| p7_ctry4 |
-0.64 |
0.04 |
-16.12 |
<0.001 |
* |
| score:predictorint_ctl |
0.06 |
0.01 |
6.60 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-1.99 |
0.047 |
* |
| score:predictorpor_mm |
0.03 |
0.03 |
0.98 |
0.329 |
|
| score:predictorhthk_wob |
0.08 |
0.04 |
2.29 |
0.022 |
* |
| score:p7_ctry1 |
0.12 |
0.03 |
3.45 |
<0.001 |
* |
| score:p7_ctry2 |
-0.02 |
0.04 |
-0.57 |
0.565 |
|
| score:p7_ctry3 |
0.07 |
0.04 |
1.65 |
0.1 |
|
| score:p7_ctry4 |
-0.06 |
0.04 |
-1.35 |
0.177 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.02 |
2.10 |
0.036 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-1.84 |
0.066 |
|
| predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.32 |
0.75 |
|
| predictorhthk_wob:p7_ctry1 |
0.00 |
0.06 |
-0.06 |
0.952 |
|
| predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-2.51 |
0.012 |
* |
| predictorabs_pmm:p7_ctry2 |
0.08 |
0.03 |
2.47 |
0.014 |
* |
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.06 |
-0.59 |
0.554 |
|
| predictorhthk_wob:p7_ctry2 |
-0.03 |
0.06 |
-0.47 |
0.641 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
-0.05 |
0.958 |
|
| predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.23 |
0.219 |
|
| predictorpor_mm:p7_ctry3 |
0.03 |
0.05 |
0.50 |
0.618 |
|
| predictorhthk_wob:p7_ctry3 |
-0.02 |
0.08 |
-0.27 |
0.786 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.02 |
1.24 |
0.215 |
|
| predictorabs_pmm:p7_ctry4 |
-0.08 |
0.04 |
-2.30 |
0.022 |
* |
| predictorpor_mm:p7_ctry4 |
0.06 |
0.07 |
0.84 |
0.399 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.06 |
-0.20 |
0.841 |
|
| score:predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.46 |
0.014 |
* |
| score:predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.17 |
0.03 |
* |
| score:predictorpor_mm:p7_ctry1 |
-0.01 |
0.06 |
-0.27 |
0.79 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.04 |
0.06 |
-0.78 |
0.434 |
|
| score:predictorint_ctl:p7_ctry2 |
0.03 |
0.02 |
1.78 |
0.075 |
|
| score:predictorabs_pmm:p7_ctry2 |
-0.01 |
0.03 |
-0.28 |
0.782 |
|
| score:predictorpor_mm:p7_ctry2 |
0.02 |
0.06 |
0.42 |
0.675 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.00 |
0.06 |
0.06 |
0.954 |
|
| score:predictorint_ctl:p7_ctry3 |
-0.02 |
0.02 |
-1.10 |
0.273 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.29 |
0.198 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.09 |
0.931 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.08 |
0.07 |
-1.09 |
0.276 |
|
| score:predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.37 |
0.709 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.02 |
0.04 |
-0.40 |
0.691 |
|
| score:predictorpor_mm:p7_ctry4 |
0.00 |
0.08 |
-0.05 |
0.963 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.02 |
0.07 |
0.25 |
0.805 |
|
In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.


“Control” scales, without reverse coding
The two control scales are the only scales that have reverse-coded items! This is really too bad, because it means that they are not actually good ways to assess a yes-bias.
In an attempt to remedy this, here I re-scoring these scales after dropping reverse-coded items.
Collapsing across sites
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.94 |
0.052 |
|
| score |
0.18 |
0.02 |
10.54 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
2.16 |
0.031 |
* |
| predictorabs_pmm |
-0.01 |
0.01 |
-1.02 |
0.31 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.11 |
0.913 |
|
| predictorhthk_wob |
0.02 |
0.02 |
0.90 |
0.37 |
|
| p7_ctry1 |
-0.35 |
0.03 |
-11.76 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.03 |
26.13 |
<0.001 |
* |
| p7_ctry3 |
-0.10 |
0.03 |
-3.44 |
<0.001 |
* |
| p7_ctry4 |
-0.95 |
0.03 |
-28.64 |
<0.001 |
* |
| score:predictorint_ctl |
0.04 |
0.01 |
5.99 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.01 |
-2.72 |
0.007 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.86 |
0.004 |
* |
| score:predictorhthk_wob |
0.08 |
0.03 |
3.14 |
0.002 |
* |
| score:p7_ctry1 |
0.07 |
0.03 |
2.61 |
0.009 |
* |
| score:p7_ctry2 |
-0.06 |
0.03 |
-1.92 |
0.055 |
|
| score:p7_ctry3 |
0.04 |
0.03 |
1.23 |
0.218 |
|
| score:p7_ctry4 |
0.01 |
0.04 |
0.38 |
0.701 |
|
| predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.56 |
0.119 |
|
| predictorabs_pmm:p7_ctry1 |
-0.03 |
0.03 |
-1.32 |
0.186 |
|
| predictorpor_mm:p7_ctry1 |
0.01 |
0.05 |
0.31 |
0.76 |
|
| predictorhthk_wob:p7_ctry1 |
-0.01 |
0.05 |
-0.26 |
0.795 |
|
| predictorint_ctl:p7_ctry2 |
-0.01 |
0.01 |
-1.22 |
0.224 |
|
| predictorabs_pmm:p7_ctry2 |
0.04 |
0.03 |
1.34 |
0.182 |
|
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.05 |
-0.68 |
0.498 |
|
| predictorhthk_wob:p7_ctry2 |
-0.03 |
0.05 |
-0.59 |
0.557 |
|
| predictorint_ctl:p7_ctry3 |
-0.01 |
0.01 |
-0.62 |
0.535 |
|
| predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.48 |
0.138 |
|
| predictorpor_mm:p7_ctry3 |
0.03 |
0.05 |
0.64 |
0.523 |
|
| predictorhthk_wob:p7_ctry3 |
0.03 |
0.05 |
0.64 |
0.525 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.24 |
0.215 |
|
| predictorabs_pmm:p7_ctry4 |
-0.10 |
0.03 |
-3.51 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.11 |
0.06 |
1.79 |
0.074 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.88 |
0.378 |
|
| score:predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.45 |
0.147 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.02 |
-2.04 |
0.042 |
* |
| score:predictorpor_mm:p7_ctry1 |
0.02 |
0.05 |
0.40 |
0.692 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.12 |
0.05 |
-2.55 |
0.011 |
* |
| score:predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.34 |
<0.001 |
* |
| score:predictorabs_pmm:p7_ctry2 |
0.05 |
0.03 |
1.73 |
0.085 |
|
| score:predictorpor_mm:p7_ctry2 |
-0.03 |
0.05 |
-0.52 |
0.603 |
|
| score:predictorhthk_wob:p7_ctry2 |
-0.05 |
0.04 |
-1.18 |
0.24 |
|
| score:predictorint_ctl:p7_ctry3 |
0.00 |
0.01 |
-0.29 |
0.772 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.48 |
0.14 |
|
| score:predictorpor_mm:p7_ctry3 |
-0.01 |
0.05 |
-0.24 |
0.813 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.00 |
0.05 |
-0.01 |
0.992 |
|
| score:predictorint_ctl:p7_ctry4 |
0.04 |
0.01 |
2.43 |
0.015 |
* |
| score:predictorabs_pmm:p7_ctry4 |
-0.05 |
0.03 |
-1.41 |
0.158 |
|
| score:predictorpor_mm:p7_ctry4 |
0.00 |
0.06 |
-0.05 |
0.964 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.03 |
0.06 |
0.51 |
0.609 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.54 |
0.125 |
|
| score |
0.20 |
0.02 |
10.08 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.35 |
0.177 |
|
| predictorabs_pmm |
-0.01 |
0.02 |
-0.39 |
0.699 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.03 |
0.972 |
|
| predictorhthk_wob |
-0.01 |
0.03 |
-0.29 |
0.771 |
|
| p7_ctry1 |
-0.18 |
0.04 |
-5.14 |
<0.001 |
* |
| p7_ctry2 |
0.66 |
0.04 |
18.67 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.03 |
-7.46 |
<0.001 |
* |
| p7_ctry4 |
-0.62 |
0.04 |
-15.85 |
<0.001 |
* |
| score:predictorint_ctl |
0.05 |
0.01 |
6.65 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-2.00 |
0.045 |
* |
| score:predictorpor_mm |
0.03 |
0.03 |
0.99 |
0.325 |
|
| score:predictorhthk_wob |
0.13 |
0.03 |
4.46 |
<0.001 |
* |
| score:p7_ctry1 |
0.10 |
0.03 |
3.11 |
0.002 |
* |
| score:p7_ctry2 |
0.00 |
0.03 |
0.01 |
0.993 |
|
| score:p7_ctry3 |
0.06 |
0.04 |
1.62 |
0.104 |
|
| score:p7_ctry4 |
-0.07 |
0.04 |
-1.59 |
0.113 |
|
| predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.46 |
0.143 |
|
| predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-1.86 |
0.063 |
|
| predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.32 |
0.747 |
|
| predictorhthk_wob:p7_ctry1 |
-0.04 |
0.06 |
-0.73 |
0.467 |
|
| predictorint_ctl:p7_ctry2 |
-0.03 |
0.01 |
-2.41 |
0.016 |
* |
| predictorabs_pmm:p7_ctry2 |
0.08 |
0.03 |
2.49 |
0.013 |
* |
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.06 |
-0.60 |
0.551 |
|
| predictorhthk_wob:p7_ctry2 |
-0.04 |
0.05 |
-0.69 |
0.492 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.01 |
-0.18 |
0.859 |
|
| predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.24 |
0.215 |
|
| predictorpor_mm:p7_ctry3 |
0.03 |
0.05 |
0.50 |
0.615 |
|
| predictorhthk_wob:p7_ctry3 |
0.05 |
0.06 |
0.85 |
0.396 |
|
| predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.56 |
0.573 |
|
| predictorabs_pmm:p7_ctry4 |
-0.08 |
0.04 |
-2.32 |
0.02 |
* |
| predictorpor_mm:p7_ctry4 |
0.06 |
0.07 |
0.85 |
0.394 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.05 |
-0.26 |
0.796 |
|
| score:predictorint_ctl:p7_ctry1 |
0.04 |
0.01 |
3.06 |
0.002 |
* |
| score:predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.19 |
0.029 |
* |
| score:predictorpor_mm:p7_ctry1 |
-0.01 |
0.05 |
-0.27 |
0.788 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.03 |
0.05 |
-0.62 |
0.534 |
|
| score:predictorint_ctl:p7_ctry2 |
0.02 |
0.01 |
1.20 |
0.232 |
|
| score:predictorabs_pmm:p7_ctry2 |
-0.01 |
0.03 |
-0.28 |
0.781 |
|
| score:predictorpor_mm:p7_ctry2 |
0.02 |
0.06 |
0.42 |
0.673 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.06 |
0.05 |
1.20 |
0.232 |
|
| score:predictorint_ctl:p7_ctry3 |
-0.02 |
0.02 |
-1.03 |
0.304 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.30 |
0.194 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.09 |
0.931 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.11 |
0.06 |
-1.80 |
0.072 |
|
| score:predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.64 |
0.522 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.02 |
0.04 |
-0.40 |
0.688 |
|
| score:predictorpor_mm:p7_ctry4 |
0.00 |
0.08 |
-0.05 |
0.962 |
|
| score:predictorhthk_wob:p7_ctry4 |
-0.04 |
0.07 |
-0.64 |
0.523 |
|
Again, in both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors.
Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

In each site considered alone
Here I conduct a set of parallel analyses, considering each site alone.
Here are our results for the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| US |
| (Intercept) |
-0.01 |
0.04 |
-0.16 |
0.871 |
|
| score |
0.26 |
0.04 |
6.06 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.20 |
0.842 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
-0.01 |
0.07 |
-0.20 |
0.844 |
|
| score:predictorint_ctl |
0.06 |
0.02 |
3.44 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.07 |
0.04 |
-1.91 |
0.057 |
|
| score:predictorpor_mm |
0.07 |
0.07 |
1.04 |
0.298 |
|
| score:predictorhthk_wob |
-0.04 |
0.07 |
-0.53 |
0.598 |
|
| Ghana |
| (Intercept) |
-0.01 |
0.04 |
-0.21 |
0.836 |
|
| score |
0.19 |
0.04 |
4.18 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.25 |
0.801 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.02 |
0.984 |
|
| score:predictorint_ctl |
-0.01 |
0.02 |
-0.39 |
0.695 |
|
| score:predictorabs_pmm |
0.01 |
0.04 |
0.28 |
0.779 |
|
| score:predictorpor_mm |
0.07 |
0.07 |
0.97 |
0.331 |
|
| score:predictorhthk_wob |
0.07 |
0.07 |
0.98 |
0.326 |
|
| Thailand |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.27 |
0.04 |
6.53 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.06 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.05 |
0.02 |
2.78 |
0.006 |
* |
| score:predictorabs_pmm |
0.01 |
0.04 |
0.17 |
0.863 |
|
| score:predictorpor_mm |
0.06 |
0.06 |
0.98 |
0.327 |
|
| score:predictorhthk_wob |
0.10 |
0.06 |
1.51 |
0.132 |
|
| China |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.23 |
0.04 |
5.45 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.09 |
0.02 |
5.03 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.08 |
0.04 |
-2.10 |
0.037 |
* |
| score:predictorpor_mm |
0.10 |
0.07 |
1.49 |
0.137 |
|
| score:predictorhthk_wob |
0.14 |
0.07 |
2.12 |
0.034 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.05 |
-0.04 |
0.967 |
|
| score |
0.11 |
0.05 |
2.42 |
0.016 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.05 |
0.96 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.01 |
0.07 |
0.14 |
0.893 |
|
| score:predictorint_ctl |
0.04 |
0.02 |
2.10 |
0.036 |
* |
| score:predictorabs_pmm |
-0.02 |
0.04 |
-0.42 |
0.674 |
|
| score:predictorpor_mm |
0.09 |
0.07 |
1.22 |
0.223 |
|
| score:predictorhthk_wob |
0.27 |
0.07 |
3.67 |
<0.001 |
* |
Here are our results for the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.04 |
-0.10 |
0.919 |
|
| score |
0.31 |
0.04 |
7.58 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.12 |
0.901 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
-0.01 |
0.07 |
-0.09 |
0.925 |
|
| score:predictorint_ctl |
0.10 |
0.02 |
5.85 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.07 |
0.04 |
-1.98 |
0.048 |
* |
| score:predictorpor_mm |
-0.02 |
0.06 |
-0.33 |
0.742 |
|
| score:predictorhthk_wob |
0.10 |
0.07 |
1.54 |
0.123 |
|
| Ghana |
| (Intercept) |
-0.01 |
0.04 |
-0.23 |
0.821 |
|
| score |
0.17 |
0.04 |
3.92 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.28 |
0.782 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
-0.04 |
0.969 |
|
| score:predictorint_ctl |
0.06 |
0.02 |
3.09 |
0.002 |
* |
| score:predictorabs_pmm |
-0.04 |
0.04 |
-1.03 |
0.304 |
|
| score:predictorpor_mm |
0.02 |
0.07 |
0.31 |
0.756 |
|
| score:predictorhthk_wob |
0.20 |
0.07 |
2.84 |
0.005 |
* |
| Thailand |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.31 |
0.04 |
7.64 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.06 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.05 |
0.02 |
2.74 |
0.006 |
* |
| score:predictorabs_pmm |
0.01 |
0.04 |
0.37 |
0.708 |
|
| score:predictorpor_mm |
0.02 |
0.06 |
0.34 |
0.738 |
|
| score:predictorhthk_wob |
0.03 |
0.06 |
0.47 |
0.637 |
|
| China |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.20 |
0.04 |
4.59 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.09 |
0.02 |
5.34 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.05 |
0.04 |
-1.33 |
0.183 |
|
| score:predictorpor_mm |
0.05 |
0.07 |
0.77 |
0.444 |
|
| score:predictorhthk_wob |
0.14 |
0.07 |
2.13 |
0.033 |
* |
| Vanuatu |
| (Intercept) |
-0.01 |
0.05 |
-0.31 |
0.76 |
|
| score |
0.09 |
0.05 |
1.87 |
0.062 |
|
| predictorint_ctl |
0.01 |
0.02 |
0.37 |
0.709 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.01 |
0.07 |
0.19 |
0.851 |
|
| score:predictorint_ctl |
0.00 |
0.02 |
0.22 |
0.824 |
|
| score:predictorabs_pmm |
0.02 |
0.04 |
0.55 |
0.585 |
|
| score:predictorpor_mm |
0.01 |
0.07 |
0.12 |
0.902 |
|
| score:predictorhthk_wob |
0.23 |
0.07 |
3.07 |
0.002 |
* |
In both cases, we found evidence in favor of Hypothesis #5 in almost all sites: In most sites, as predicted the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded rows in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors. The only exceptions to this were Ghana when using the Daily Spiritual Experiences scale (first table above), and Vanuatu when using the Spiritual Events scale (second table above).



LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNS0wNyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0Kc291cmNlKCIuL3NjcmlwdHMvcDdfZGF0YV9wcmVwLlIiKQpgYGAKCiMgQ29uZmlybWF0b3J5IGh5cG90aGVzZXMgKGFzIHNwZWNpZmllZCBpbiBwcmVyZWdpc3RyYXRpb24pCgpfTk9URTogSSBpbmNsdWRlZCBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MsIHNpbmNlIHdlIGRpZCBub3Qgc3BlY2lmeSB0aGF0IHdlIHdvdWxkIGV4Y2x1ZGUgcGFydGljaXBhbnRzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHRyeSBydW5uaW5nIGV2ZXJ5dGhpbmcgb24gdGhlIHN1YnNldCBvZiBwYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyBqdXN0IHNvIHRoYXQgd2Uga25vdywgYnV0IHRoaXMgZGVjcmVhc2VzIG91ciBzYW1wbGUgc2l6ZXMgcHJldHR5IGRyYW1hdGljYWxseS5fCgpfQUxTTyBOT1RFOiBJIGluY2x1ZGVkIG9ubHkgdGhlIHNlY29uZCBzYW1wbGUgb2YgR2hhbmFpYW4gcGFydGljaXBhbnRzLCB3aG8gd2VyZSByZWNydWl0ZWQgYWNjb3JkaW5nIHRvIG91ciBzdGFuZGFyZHMgYW5kIGFzIHNwZWNpZmllZCBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBGb3IgdGhlIG1vc3QgcGFydCwgYWxsIHJlc3VsdHMgYXJlIHRoZSBzYW1lIHdoZW4gaW5jbHVkaW5nIHRoZSBmdWxsLCAiZG91YmxlIiBzYW1wbGUgb2YgR2hhbmFpYW4gcGFydGljaXBhbnRzLl8KCl9BTFNPIE5PVEU6IEluIFRoYWlsYW5kIHRoaXMgcGFja2V0IHdhcyBtaXNzaW5nIG9uZSBxdWVzdGlvbiBvbiB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZS4gSSBoYXZlIHJlc2NhbGVkIFRoYWkgcGFydGljaXBhbnRzJyBQb3Jvc2l0eSBzY29yZXMgdG8gcnVuIGZyb20gMC0zMiBpbiBvcmRlciB0byBtYXRjaCB0aGUgb3RoZXIgc2l0ZXMuXwoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMQoKX19IeXBvdGhlc2lzICMxOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiB0aGUgVGVsbGVnZW4gQWJzb3JwdGlvbiBTY2FsZSAoVGVsbGVnZW4gJiBBdGtpbnNvbiwgMTk3NCkgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgYWJzb3JwdGlvbiBzY29yZXMgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcywgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gT3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfaDEgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDEkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksCiAgICAgICAgICAgIyBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSBjYmluZChHSCA9IGMoLTEsIDEsIDAsIDAsIDApLAogICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEggPSBjKC0xLCAwLCAxLCAwLCAwKSwKICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIID0gYygtMSwgMCwgMCwgMSwgMCksCiAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVCA9IGMoLTEsIDAsIDAsIDAsIDEpKSksCiAgICAgICAgICAgZF9zdGRfaDEpCiMgc3VtbWFyeShyMSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjEpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDFfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwsIHA3X2RzZV90b3RhbCwgcDdfc2VfdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMV9zdW0KYGBgCgoqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzEqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGUgYWJvdmUpLiAKCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBhYnNvcnB0aW9uLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gImFicyJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBBYnNvcnB0aW9uIHNjYWxlIChyYW5nZTogMC0zNCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc3VtJHN0ZGV2W2gxX3N1bSRzY2FsZSA9PSAiZHNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGUgKHJhbmdlOiAwLTcwKSBvciBgciAoc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gInNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChyYW5nZTogMC04MCkuCgpgYGB7cn0KaDFfcGxvdF9hIDwtIGRfc3RkX2gxICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMxOiBCeSBzaXRlIGFuZCBzY2FsZSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgxX3Bsb3RfYiA8LSBkX3N0ZF9oMSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMxOiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMV9wbG90X2EsIGgxX3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIeXBvdGhlc2lzICMyCgpfX0h5cG90aGVzaXMgIzI6IFBlb3BsZSB3aG8gc2NvcmUgaGlnaGVyIG9uIG91ciB0d28gcG9yb3NpdHkgaW5kaWNlcyBhbHNvIHJlcG9ydCBtb3JlIHNwaXJpdHVhbCBleHBlcmllbmNlcy5fXwoKUHJlcmVnaXN0ZXJlZCBhbmFseXNpczogIldlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSwgY29sbGFwc2luZyBhY3Jvc3MgZmllbGQgc2l0ZXMsIGFuZCB0aGVuIGNvbmR1Y3QgYSBtaXhlZC1lZmZlY3RzIGxpbmVhciByZWdyZXNzaW9uLCB1c2luZyBwb3Jvc2l0eSBzY29yZXMgKGZyb20gZWFjaCBvZiBvdXIgdHdvIGluZGljZXMpIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgYWNyb3NzIHRoZSAyIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcyBpbmNsdWRlZCBpbiBvdXIgc3VydmV5IHBhY2tldCwgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzaXRlICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLCB3aGVyZSDigJxzY2FsZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcyAoZWZmZWN0LWNvZGVkKSwgYW5kIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCkuIFdlIHdpbGwgcnVuIHR3byB2ZXJzaW9ucyBvZiB0aGlzIG1vZGVsLCBvbmUgdXNpbmcgZWFjaCBvZiB0aGUgdHdvIOKAnHBvcm9zaXR54oCdIG1lYXN1cmVzIGRlc2NyaWJlZCBhYm92ZS4gRm9yIGVhY2ggcmVncmVzc2lvbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgcG9yb3NpdHkgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCB0ID4gMiwgcCA8IDAuMDUgdXNpbmcgU2F0dGVydGh3YWl0ZSdzIGRlZ3JlZXMgb2YgZnJlZWRvbSBtZXRob2QgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIOKAnGxtZXJUZXN04oCdIHBhY2thZ2UgZm9yIFIsIEt1em5ldHNvdmEsIEJyb2NraG9mZiwgJiBDaHJpc3RlbnNlbiwgMjAxNykuIChUaGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyBpbmNsdWRlZCBpbiB0aGUgbW9kZWwgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCB0byB1cywgYnV0IGFyZSBleHBsb3JhdG9yeS4pCgpJZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzY2FsZSArICgxIHwgc2l0ZS9zdWJqZWN0KS4iCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfaDIgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gyJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2gyJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMl9wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwKICAgICAgICAgICAjIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9IGNiaW5kKEdIID0gYygtMSwgMSwgMCwgMCwgMCksCiAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSCA9IGMoLTEsIDAsIDEsIDAsIDApLAogICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ggPSBjKC0xLCAwLCAwLCAxLCAwKSwKICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZUID0gYygtMSwgMCwgMCwgMCwgMSkpKSwKICAgICAgICAgICBkX3N0ZF9oMikKIyBzdW1tYXJ5KHIyX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX21tIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgIyBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSBjYmluZChHSCA9IGMoLTEsIDEsIDAsIDAsIDApLAogICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEggPSBjKC0xLCAwLCAxLCAwLCAwKSwKICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIID0gYygtMSwgMCwgMCwgMSwgMCksCiAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVCA9IGMoLTEsIDAsIDAsIDAsIDEpKSksCiAgICAgICAgICAgZF9zdGRfaDIpCiMgc3VtbWFyeShyMl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDJfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X2RzZV90b3RhbCwgcDdfc2VfdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMl9zdW0KYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzIqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgcG9yb3NpdHkgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gYm90aCByZWdyZXNzaW9uIGFuYWx5c2VzIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAicG9yIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFBvcm9zaXR5IHNjYWxlIChyYW5nZTogMC0zMiksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDJfcGxvdF9iMSA8LSBkX3N0ZF9oMiAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDJfcGxvdF9hMSwgaDJfcGxvdF9iMSwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYTIgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogQnkgc2l0ZSBhbmQgc2NhbGUgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgyX3Bsb3RfYTIsIGgyX3Bsb3RfYjIsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMwoKX19IeXBvdGhlc2lzICMzOiBUaGUgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgZXhwZXJpZW5jZSBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJGb3IgZWFjaCBvZiBvdXIgZml2ZSBmaWVsZCBzaXRlcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlIChjb25zaWRlcmluZyBvbmx5IHBhcnRpY2lwYW50cyBmcm9tIHRoYXQgZmllbGQgc2l0ZSksIGFuZCB0aGVuIGNvbmR1Y3QgdGhlIHNhbWUgYW5hbHlzZXMgc3BlY2lmaWVkIGFib3ZlIGZvciBbSHlwb3RoZXNpcyAjMV0gdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXBbXSBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIFsuLi5dIGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuIEZvciBIeXBvdGhlc2lzICMzLCBvdXIgbW9kZWxzIHdpbGwgdGFrZSB0aGUgZm9sbG93aW5nIGZvcm06IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLiBbLi4uXSBBZ2Fpbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIGFuZCBvZiBlYWNoIHBvcm9zaXR5IG1lYXN1cmUgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCBwIDwgMC4wNSkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2gxIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBhYnMpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyM191cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM191cykKYGBgCgpgYGB7cn0KcjNfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfZ2gpCmBgYAoKYGBge3J9CnIzX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3RoKQpgYGAKCmBgYHtyfQpyM19jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19jaCkKYGBgCgpgYGB7cn0KcjNfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM192dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjNfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHIzX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM190aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjNfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHIzX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgoqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzMgaW4gYWxsIHNpdGVzIF9leGNlcHRfIFZhbnVhdHUqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgYW5kIENoaW5h4oCUYnV0IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBWYW51YXR1IChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoZSBlZmZlY3QgIm1hcmdpbmFsbHkgc2lnbmlmaWNhbnQiOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZF9zdGRfYnlzaXRlX2gxICU+JQogICAgICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpLCAKICAgICAgIGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKyAKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKyAKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMzIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiSHlwb3RoZXNpcyAjMSwiIGFib3ZlLikKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzQKCl9fSHlwb3RoZXNpcyAjNDogVGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIGV4cGVyaWVuY2UgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5Ll9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiRm9yIGVhY2ggb2Ygb3VyIGZpdmUgZmllbGQgc2l0ZXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSAoY29uc2lkZXJpbmcgb25seSBwYXJ0aWNpcGFudHMgZnJvbSB0aGF0IGZpZWxkIHNpdGUpLCBhbmQgdGhlbiBjb25kdWN0IHRoZSBzYW1lIGFuYWx5c2VzIHNwZWNpZmllZCBhYm92ZSBmb3IgW0h5cG90aGVzaXMgIzJdIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwWy4uLl0gYmV0d2VlbiBwb3Jvc2l0eSBhbmQgZXhwZXJpZW5jZSBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5LiBbLi4uXSBGb3IgSHlwb3RoZXNpcyAjNCwgb3VyIG1vZGVscyB3aWxsIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzY2FsZSArICgxIHwgc3ViamVjdCkuIFsuLi5dIEFnYWluLCBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIG9uIGV4cGVyaWVuY2UgYW5kIG9mIGVhY2ggcG9yb3NpdHkgbWVhc3VyZSBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHAgPCAwLjA1KS4iCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2g0IDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNCRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfcG9yX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKVXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlLCAqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzQgaW4gYWxsIHNpdGVzKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBDaGluYSwgYW5kIFZhbnVhdHUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNCAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNCAodXNpbmcgUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnI0X21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfbW1fdXMpCmBgYAoKYGBge3J9CnI0X21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfbW1fZ2gpCmBgYAoKYGBge3J9CnI0X21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfbW1fdGgpCmBgYAoKYGBge3J9CnI0X21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfbW1fY2gpCmBgYAoKYGBge3J9CnI0X21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpVc2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCAqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzQgaW4gYWxsIHNpdGVzIF9leGNlcHRfIFZhbnVhdHUqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgTWFydGhhIFN0b3J5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBhbmQgQ2hpbmHigJRidXQgdGhpcyB3YXMgbm90IHRoZSBjYXNlIGluIFZhbnVhdHUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNCAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM0ICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBTZWNvbmRhcnkgZXhwbG9yYXRvcnkgYW5hbHlzZXMKCiMjICJTZWN1bGFyIiBleHBlcmllbmNlcwoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJGaXJzdCwgaW4gb3JkZXIgdG8gZXhwbG9yZSB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBhZmZpcm1hdGlvbiBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgcG9yb3NpdHkgYW5kIGFic29ycHRpb24gYXJlIHNpbXBseSBkdWUgdG8gdGhlIHJlbGlnaW9zaXR5IG9mIHBhcnRpY2lwYW50cywgd2Ugd2lsbCBjb25kdWN0IGFkZGl0aW9uYWwgYW5hbHlzZXMgZm9jdXNpbmcgb24gdGhlIHR3byDigJxzZWN1bGFy4oCdIGV4cGVyaWVuY2Ugc2NhbGVzICh0aGUgcmV2aXNlZCBMYXVuYXkgU2xhZGUgc2NhbGUsIE1vcnJpc29uLCBXZWxscyBhbmQgTm90aGFyZCAyMDAwXTsgYW5kIHRoZSBTaGVlcC1Hb2F0IFtwYXJhbm9ybWFsXSBzY2FsZSwgVGhhbGJvcm5lICYgRGVsaW4sIDE5OTMpLiBUaGVzZSBhbmFseXNlcyB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgcHJpbWFyeSBhbmFseXNlcyBvdXRsaW5lZCBhYm92ZSwgZXhjZXB0IHRoYXQgdGhleSB3aWxsIG9ubHkgaW5jbHVkZSB0aGVzZSB0d28g4oCcc2VjdWxhciBleHBlcmllbmNl4oCdIHNjYWxlcyBhbmQgbm90IHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzLiBXZSBjb25zaWRlciB0aGVzZSB0byBiZSBleHBsb3JhdG9yeSBhbmFseXNlcy4iCgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMQoKYGBge3J9CmRfc3RkX2gxX3NlYyA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gxX3NlYyRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMV9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxX3NlYyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgZF9zdGRfaDFfc2VjKQojIHN1bW1hcnkocjFfc2VjKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDFfc2VjX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgxX3NlY19zdW0KYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgYWxzbyBzaWduaWZpY2FudGx5IHBvc2l0aXZlKiogKHNlZSBib2xkZWQgcm93IHRhYmxlIGFib3ZlKS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBhYnNvcnB0aW9uLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc2VjdWxhciBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJhYnMiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgQWJzb3JwdGlvbiBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gInVuZXYiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFVuY29tbW9uIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtMTgpIG9yIGByIChzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGlzIHdhcyBhY3R1YWxseSBhIChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3QgdGhhbiB3aGF0IHdlIGRvY3VtZW50ZWQgZm9yIHNwaXJpdHVhbCBleHBlcmllbmNlcyAoYiA9IGByIHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWApLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyfQpoMV9zZWNfcGxvdF9hIDwtIGRfc3RkX2gxX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxOiBCeSBzaXRlIGFuZCBzY2FsZSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMV9zZWNfcGxvdF9iIDwtIGRfc3RkX2gxX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzE6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMV9zZWNfcGxvdF9hLCBoMV9zZWNfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfaDJfc2VjIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gyX3NlYyRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMl9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIyX3NlY19wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX3NlY19tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIsIGluIGJvdGggY2FzZXMsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzIpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGVzZSB3ZXJlIGFjdHVhbGx5IChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3RzIHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFBvcm9zaXR5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgOyBNYXJ0aGEgU3Rvcnk6IGIgPSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMl9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDFfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfc2VjX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM19zZWNfdXMpCmBgYAoKYGBge3J9CnIzX3NlY19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfc2VjX2doKQpgYGAKCmBgYHtyfQpyM19zZWNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3NlY190aCkKYGBgCgpgYGB7cn0KcjNfc2VjX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19zZWNfY2gpCmBgYAoKYGBge3J9CnIzX3NlY192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM19zZWNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3NlY191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM19zZWNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNAoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0X3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0LCB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIF9hbGxfIHNpdGVzKiosIGluY2x1ZGluZyBWYW51YXR1ICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIF9ub3RfIHNpZ25pZmljYW50bHkgcG9zaXRpdmU7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfc2VjX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV91cykKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1KiogKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgYWxzbyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAiQ29udHJvbCIgc2NhbGVzIChIeXBvdGhlc2lzICM1KQoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJTZWNvbmQsIGluIG9yZGVyIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgaHlwb3RoZXNpemVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGFuZCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGNhbiBiZSBleHBsYWluZWQgYnkgYSBsb3dlci1sZXZlbCBwcm9jZXNzZXPigJRuYW1lbHksIGluZGl2aWR1YWwgb3IgY3Jvc3MtY3VsdHVyYWwgZGlmZmVyZW5jZXMgaW4gYW4gb3ZlcmFsbCB0ZW5kZW5jeSB0byBhZ3JlZSB3aXRoIHRoZSBxdWVzdGlvbnMgcG9zZWQgYnkgdGhlc2Ugc2NhbGVzIChpLmUuLCBhIOKAnHllc+KAnSBiaWFzKSwgd2Ugd2lsbCBhbHNvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdHdvIOKAnGNvbnRyb2zigJ0gc2NhbGVzICh0aGUgU2Vuc2Ugb2YgQ29udHJvbCBzY2FsZSwgTGFjaG1hbiAmIFdlYXZlciwgMTk5ODsgYW5kIHRoZSBOZWVkIGZvciBDb2duaXRpb24gc2NhbGUsIENhY2lvcHBvLCBQZXR0eSwgJiBLYW8sIDE5OTMpIGFuZCBvdXIgbWVhc3VyZXMgb2YgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUaGlzIHByb3ZpZGVzIHNvbWV0aGluZyBvZiBhIG5lZ2F0aXZlIGNvbnRyb2wgZm9yIG91ciBwcmltYXJ5IGh5cG90aGVzZXMuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgYW55IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGVzZSBjb250cm9sIG1lYXN1cmVzIHdpbGwgYmUgd2Vha2VyIHRoYW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUbyBhc3Nlc3MgdGhpcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHNjb3JlcyBvbiBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIGNvbnRyb2wgc2NhbGVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFVzaW5nIHRoZSDigJxzdGF0c+KAnSBwYWNrYWdlIGZvciBSLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBzaXRlICArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCksIGFuZOKAlGNyaXRpY2FsbHnigJTigJxwcmVkaWN0b3LigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3J0aG9nb25hbCBjb250cmFzdHM6ICgxKSBTY2FsZXMgb2YgaW50ZXJlc3QgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHZzLiBjb250cm9sIHNjYWxlczsgKDIpIGFic29ycHRpb24gdnMuIHBvcm9zaXR5IG1lYXN1cmVzOyAoMykgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgRHVsaW4gc2NhbGUgdnMuIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1lbnRhbCBDYXVzYXRpb24gc2NhbGU7ICg0KSBOZWVkIGZvciBDb2duaXRpb24gdnMuIE5lZWQgZm9yIENvbnRyb2wgKE1hc3RlcnkgU3Vic2NhbGUpLiBCZWNhdXNlIG9mIHRoZSB1bnVzdWFsIGFuZCBjb21wbGV4IGZvcm11bGF0aW9uIG9mIHRoaXMgbW9kZWzigJRjb25zaWRlcmluZyBlYWNoIG9mIHRoZXNlIDUg4oCccHJlZGljdG9yc+KAnSBhcyByZXBlYXRlZCBvYnNlcnZhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIOKAnHNjb3Jl4oCd4oCUd2Ugd2lsbCBjb25kdWN0IHNlcGFyYXRlIG1vZGVscyBmb3IgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBhbmQgU3Bpcml0dWFsIEV2ZW50cyksIHJhdGhlciB0aGFuIGluY29ycG9yYXRpbmcgYm90aCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgbWVhc3VyZXMgaW50byB0aGUgc2FtZSBtb2RlbCAoYXMgaW4gSHlwb3RoZXNlcyAjMS00KS4gQXMgaW4gSHlwb3RoZXNlcyAjMS00LCBpZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKyAoMSB8IHNpdGUvc3ViamVjdCkuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGNvbmZpcm1hdG9yeSB0ZXN0cywgYW5kIGluIGVhY2ggY2FzZSBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB0d28td2F5IGludGVyYWN0aW9uIGJldHdlZW4g4oCcc2NvcmXigJ0gYW5kIHRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IG9uIOKAnHByZWRpY3RvcuKAnSAoY29tcGFyaW5nIHRoZSBwcmVkaWN0aXZlIHBvd2VyIG9mIG91ciBzY2FsZXMgb2YgaW50ZXJlc3QgdnMuIG91ciB0d28gY29udHJvbCBzY2FsZXMpIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSkuIgoKQWx0aG91Z2ggd2UgZGlkIG5vdCBudW1iZXIgdGhpcyBoeXBvdGhlc2lzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24sIEknbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2FsbCBpdCBIeXBvdGhlc2lzICM1LgoKYGBge3J9CmRfc3RkX2g1IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSwgaHRoaywgd29iKSAlPiUKICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSwgaHRoaywgd29iKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDUkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCl9OT1RFOiBOZWl0aGVyIG9mIHRoZSBtb2RlbHMgd2Ugc3BlY2lmaWVkIGluIHRoZSBwcmVyZWdpc3RyYXRpb24gd2VyZSBhYmxlIHRvIHJ1bi4gSSB0aGluayB0aGlzIGlzIGR1ZSB0byBhbiBlcnJvciBpbiBteSB0aGlua2luZyAoYWJvdXQgd2hpY2ggb2Ygb3VyIG1lYXN1cmVzIHdlcmUgInJlcGVhdGVkIG1lYXN1cmVzIikuIFRoZSBtb2RlbHMgcmVwb3J0ZWQgaGVyZSBhcmUgdmVyeSBjbG9zZSB0byB3aGF0IHdlIHByZXJlZ2lzdGVyZWQuXwoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAic2UiKSkKIyBzdW1tYXJ5KHI1X3NlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNV9zZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X3Bsb3RfYSA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYiA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2EsIGg1X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYyA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9kIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIEV2ZW50cyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfcGxvdF9jLCBoNV9wbG90X2QsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjICJDb250cm9sIiBzY2FsZXMsIHdpdGhvdXQgcmV2ZXJzZSBjb2RpbmcKClRoZSB0d28gY29udHJvbCBzY2FsZXMgYXJlIHRoZSBvbmx5IHNjYWxlcyB0aGF0IGhhdmUgcmV2ZXJzZS1jb2RlZCBpdGVtcyEgVGhpcyBpcyByZWFsbHkgdG9vIGJhZCwgYmVjYXVzZSBpdCBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCBhY3R1YWxseSBnb29kIHdheXMgdG8gYXNzZXNzIGEgeWVzLWJpYXMuCgpJbiBhbiBhdHRlbXB0IHRvIHJlbWVkeSB0aGlzLCBoZXJlIEkgcmUtc2NvcmluZyB0aGVzZSBzY2FsZXMgYWZ0ZXIgX2Ryb3BwaW5nIHJldmVyc2UtY29kZWQgaXRlbXNfLgoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9jdGxfbm9yZXYgPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHN0YXJ0c193aXRoKCJwN19odGhrIiksIHN0YXJ0c193aXRoKCJwN193b2IiKSwKICAgICAgICAgLWMoZW5kc193aXRoKCJfY2F0IiksIGVuZHNfd2l0aCgiX3RvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgc2VsZWN0KC1jKGNvbnRhaW5zKCJyZXZlcnNlIikpKSAlPiUgIyBkcm9wIFExLCBRMiwgUTMsIFE0IGZyb20gd29iIAogIHNlbGVjdCgtYyhwN19odGhrX25vdC5mdW4sIHA3X2h0aGtfbGlsLmNoYWxsZW5nLCBwN19odGhrX2F2b2lkLnRoaW5rLAogICAgICAgICAgICBwN19odGhrX2hyZC5oYXYudG8sIHA3X2h0aGtfc21hbC5kYWlseSwgcDdfaHRoa19saWwudGhvdWdodCwKICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCBwN19odGhrX2pvYi5kb25lKSkgJT4lICMgZHJvcCBRMywgUTQsIFE1LCBRNywgUTgsIFE5LCBRMTIsIFExNiwgUTE3IGZyb20gaHRoawogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBpZmVsc2UoZ3JlcGwoImh0aGsiLCBxdWVzdGlvbiksICJodGhrIiwKICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCJ3b2IiLCBxdWVzdGlvbiksICJ3b2IiLCBOQSkpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCBzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBtdXRhdGUoc2NvcmVfbm9yZXZfc3RkID0gc2NhbGUoc2NvcmVfbm9yZXYsIHNjYWxlID0gVCkpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpkX3N0ZF9oNV9ub3JldiA8LSBmdWxsX2pvaW4oCiAgZF9zdGQgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZnVsbF9qb2luKAogICAgZF9zdGQgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkgJT4lCiAgICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSkpLAogICAgZF9jdGxfbm9yZXYgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlLCBzY29yZV9ub3Jldl9zdGQpICU+JQogICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiaHRoa19ub3JldiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJ3b2Jfbm9yZXYiKSkgJT4lCiAgICAgIHJlbmFtZShwcmVkaWN0b3IgPSBzY2FsZSwKICAgICAgICAgICAgIHNjb3JlID0gc2NvcmVfbm9yZXZfc3RkKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6IAoKYGBge3J9CnI1X25vcmV2X2RzZSA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBwN19jdHJ5LCAKICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2ICU+JSBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpKQojIHN1bW1hcnkocjVfbm9yZXZfZHNlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNV9ub3Jldl9kc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X25vcmV2X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3JldiAlPiUgZmlsdGVyKHNjYWxlID09ICJzZSIpKQojIHN1bW1hcnkocjVfbm9yZXZfc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X25vcmV2X3NlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTEsIGJvbGQgPSBUKQpgYGAKCkFnYWluLCBpbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLCBldmVuIHdoZW4gd2Ugb25seSBpbmNsdWRlZCB0aGUgbm9uLXJldmVyc2UtY29kZWQgaXRlbXMgZnJvbSB0aGUgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X25vcmV2X3Bsb3RfYSA8LSBkX3N0ZF9oNV9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9iIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfbm9yZXZfcGxvdF9hLCBoNV9ub3Jldl9wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2MgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9kIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9ub3Jldl9wbG90X2MsIGg1X25vcmV2X3Bsb3RfZCwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIEluIGVhY2ggc2l0ZSBjb25zaWRlcmVkIGFsb25lCgpIZXJlIEkgY29uZHVjdCBhIHNldCBvZiBwYXJhbGxlbCBhbmFseXNlcywgY29uc2lkZXJpbmcgZWFjaCBzaXRlIGFsb25lLgoKYGBge3J9CmRfY3RsX25vcmV2X2J5c2l0ZSA8LSBkMCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3Viaiwgc3RhcnRzX3dpdGgoInA3X2h0aGsiKSwgc3RhcnRzX3dpdGgoInA3X3dvYiIpLAogICAgICAgICAtYyhlbmRzX3dpdGgoIl9jYXQiKSwgZW5kc193aXRoKCJfdG90YWwiKSwgY29udGFpbnMoImNoZWNrIikpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoInJldmVyc2UiKSkpICU+JSAjIGRyb3AgUTEsIFEyLCBRMywgUTQgZnJvbSB3b2IgCiAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bywgcDdfaHRoa19zbWFsLmRhaWx5LCBwN19odGhrX2xpbC50aG91Z2h0LAogICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgIyBkcm9wIFEzLCBRNCwgUTUsIFE3LCBROCwgUTksIFExMiwgUTE2LCBRMTcgZnJvbSBodGhrCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGlmZWxzZShncmVwbCgiaHRoayIsIHF1ZXN0aW9uKSwgImh0aGsiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIndvYiIsIHF1ZXN0aW9uKSwgIndvYiIsIE5BKSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9ub3Jldl9zdGQgPSBzY2FsZShzY29yZV9ub3Jldiwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc3RkX2g1X25vcmV2X2J5c2l0ZSA8LSBmdWxsX2pvaW4oCiAgZF9zdGRfYnlzaXRlICU+JQogICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpLAogIGZ1bGxfam9pbigKICAgIGRfc3RkX2J5c2l0ZSAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICAgICAgZ2F0aGVyKHByZWRpY3Rvciwgc2NvcmUsIGMoYWJzLCBwb3IsIG1tKSksCiAgICBkX2N0bF9ub3Jldl9ieXNpdGUgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlLCBzY29yZV9ub3Jldl9zdGQpICU+JQogICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiaHRoa19ub3JldiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJ3b2Jfbm9yZXYiKSkgJT4lCiAgICAgIHJlbmFtZShwcmVkaWN0b3IgPSBzY2FsZSwKICAgICAgICAgICAgIHNjb3JlID0gc2NvcmVfbm9yZXZfc3RkKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3Jldl9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3Jldl9ieXNpdGUkcHJlZGljdG9yKSA8LSBjYmluZCgKICBpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgYWJzX3BtbSA9IGMoMiwgMCwgLTEsIC0xLCAwKSwKICBwb3JfbW0gPSBjKDAsIDAsIC0xLCAxLCAwKSwKICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIGZvciB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlOgoKYGBge3J9CnI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX2doIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfZHNlX2doKQoKcjVfYnlzaXRlX25vcmV2X2RzZV90aCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV90aCkKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfY2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfY2gpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX3Z0IDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDEwKSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDExLCAyMCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAyMSwgMzApICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMzEsIDQwKSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNDEsIDUwKSAlPiUKICByb3dfc3BlYyhjKHNlcSg3LCA0NywgMTApKSwgYm9sZCA9IFQpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgZm9yIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6CgpgYGB7cn0KcjVfYnlzaXRlX25vcmV2X3NlX3VzIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdXMpCgpyNV9ieXNpdGVfbm9yZXZfc2VfZ2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9naCkKCnI1X2J5c2l0ZV9ub3Jldl9zZV90aCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3RoKQoKcjVfYnlzaXRlX25vcmV2X3NlX2NoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfY2gpCgpyNV9ieXNpdGVfbm9yZXZfc2VfdnQgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDIxLCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAzMSwgNDApICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCA0MSwgNTApICU+JQogIHJvd19zcGVjKGMoc2VxKDcsIDQ3LCAxMCkpLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUgaW4gYWxtb3N0IGFsbCBzaXRlcyoqOiBJbiBtb3N0IHNpdGVzLCBhcyBwcmVkaWN0ZWQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gInNjb3JlIiBhbmQgdGhlIGZpcnN0IGNvbnRyYXN0IG9uIHRoZSAicHJlZGljdG9yIiBwYXJhbWV0ZXIgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMsIGV2ZW4gd2hlbiB3ZSBvbmx5IGluY2x1ZGVkIHRoZSBub24tcmV2ZXJzZS1jb2RlZCBpdGVtcyBmcm9tIHRoZSB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgdG8gdGhpcyB3ZXJlIEdoYW5hIHdoZW4gdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAoZmlyc3QgdGFibGUgYWJvdmUpLCBhbmQgVmFudWF0dSB3aGVuIHVzaW5nIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChzZWNvbmQgdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC44LCBpbmNsdWRlID0gVH0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpLAogICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgZmlsbCA9IHByZWRfdHlwZSwgY29sb3IgPSBwcmVkX3R5cGUpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhzY2FsZSksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKGFlcyhmaWxsID0gcHJlZF90eXBlLCBjb2xvciA9IHByZWRfdHlwZSksCiAgICAgICAgICAgICAgbWV0aG9kID0gImxtIiwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKCkgKwogIHNjYWxlX2ZpbGxfZGlzY3JldGUoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciB0eXBlIiwgZmlsbCA9ICJQcmVkaWN0b3IgdHlwZSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBCZXlvbmQgdGhlIHByZXJlZ2lzdHJhdGlvbgoKIyMgQ29tYmluZWQgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBvbiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKGFic29ycHRpb24gY29udHJvbGxpbmcgZm9yIHBvcm9zaXR5ICYgdmljZSB2ZXJzYSkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKSGVyZSBJIGV4YW1pbmUgYSBiaWcgbW9kZWwsIGluIHdoaWNoIGJvdGggYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkgdG9nZXRoZXIgcHJlZGljdCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGxvb2sgYXQgdGhlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGNvbnRyb2xsaW5nIGZvciBwb3Jvc2l0eSwgdGhlIGVmZmVjdCBvZiBwb3Jvc2l0eSBjb250cm9sbGluZyBmb3IgYWJzb3JwdGlvbiwgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LiBJIGxvb2sgYXQgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSBhbmQgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNlcGFyYXRlbHksIGFuZCB1c2UgYm90aCB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2UgYW5kIFNwaXJpdHVhbCBFdmVudHMgc2NhbGVzIHRvIGluZGV4IHNwaXJpdHVhbCBleHBlcmllbmNlLgoKYGBge3J9CmRfc3RkX2g2IDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X2N0cnksIHNjYWxlKSwgZnVucyhmYWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g2JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g2JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOiAKCmBgYHtyfQpyNl9wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcDdfY3RyeSAqIHNjYWxlIAogICAgICAgICAgICAgICArICgxIHwgcDdfc3ViaiksIGRfc3RkX2g2KQojIHN1bW1hcnkocjZfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgOSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDYpCiMgc3VtbWFyeShyNl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjZfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgOSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2Ugc2VlIGV2aWRlbmNlIGZvciBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBiZWluZyBwb3NpdGl2ZWx5IHJlbGF0ZWQgdG8gc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIqKjogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlLCBjb250cm9sbGluZyBmb3IgcG9yb3NpdHk7IGFuZCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IChhcyBpbmRleGVkIGJ5IGVpdGhlciB0aGUgRHVsaW4gc2NhbGUgb3IgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBhbHNvIHNpZ25pZmljYW50bHkgcG9zaXRpdmUsIGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLiBUaGVyZSB3YXMgbm8gc3Ryb25nIGV2aWRlbmNlIG9mIGFuIGludGVyYWN0aXZlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiBlaXRoZXIgY2FzZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuCgpgYGB7cn0KaDZfcGxvdF9hMSA8LSBkX3N0ZF9oNiAlPiUKICBhcnJhbmdlKGV4cGVyaWVuY2UpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IHBvciwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IxIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gcG9yLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gRn0KcGxvdF9ncmlkKHBsb3RfZ3JpZChoNl9wbG90X2ExICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgaDZfcGxvdF9iMSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHMgPSBjKDIsIDEpKSwKICAgICAgICAgIGdldF9sZWdlbmQoaDZfcGxvdF9hMSksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYTIgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBtbSwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUiLAogICAgICAgeSA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IyIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gbW0sIGNvbG9yID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiTWFydGhhIFN0b3J5IHNjb3JlIiwKICAgICAgIGNvbG9yID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IEZ9CnBsb3RfZ3JpZChwbG90X2dyaWQoaDZfcGxvdF9hMiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIGg2X3Bsb3RfYjIgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICByZWxfd2lkdGhzID0gYygyLCAxKSksCiAgICAgICAgICBnZXRfbGVnZW5kKGg2X3Bsb3RfYTIpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQpgYGAKCiMjIyBJbiBlYWNoIHNpdGUgY29uc2lkZXJlZCBhbG9uZQoKSGVyZSBJIGNvbmR1Y3QgYSBzZXQgb2YgcGFyYWxsZWwgYW5hbHlzZXMsIGNvbnNpZGVyaW5nIGVhY2ggc2l0ZSBhbG9uZS4KCmBgYHtyfQpkX3N0ZF9oNl9ieXNpdGUgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0pKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19jdHJ5LCBzY2FsZSksIGZ1bnMoZmFjdG9yKSkKCmNvbnRyYXN0cyhkX3N0ZF9oNl9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDZfYnlzaXRlJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOiAKCmBgYHtyfQpyNl9ieXNpdGVfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl91cykKCnI2X2J5c2l0ZV9wb3JfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2doKQoKcjZfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdGgpCgpyNl9ieXNpdGVfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9jaCkKCnI2X2J5c2l0ZV9wb3JfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDgpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgOSwgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMTcsIDI0KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDI1LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDMzLCA0MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMzQsIDgpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDM1LCA4KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV91cykKCnI2X2J5c2l0ZV9tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX2doKQoKcjZfYnlzaXRlX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdGgpCgpyNl9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9jaCkKCnI2X2J5c2l0ZV9tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI2X2J5c2l0ZV9tbV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA4KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDksIDE2KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDE3LCAyNCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAyNSwgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAzMywgNDApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDM0LCA4KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCAzNSwgOCkpLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIHNlZSBzb21lIGV2aWRlbmNlIGZvciBwb3Jvc2l0eSAic3dhbXBpbmcgb3V0IiB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gaW4gc29tZSBzaXRlcyoqLCBpbmNsdWRpbmcgR2hhbmEsIENoaW5hLCBhbmQgVmFudWF0dSB3aGVuIHBvcm9zaXR5IGlzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU7IGFuZCB0aGUgVVMsIEdoYW5hLCBhbmQgVmFudWF0dSB3aGVuIHBvcm9zaXR5IGlzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAoaW4gZmFjdCwgaW4gdGhpcyBzZWNvbmQgc2V0IG9mIGFuYWx5c2VzLCBuZWl0aGVyIEFic29ycHRpb24gbm9yIE1hcnRoYSBTdG9yeSBlbmRzIHVwIGJlaW5nIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIGluIEdoYW5hIG9yIFZhbnVhdHUpLgoKYGBge3J9CiMgcGFydGlhbCBjb3JyZWxhdGlvbnMKZF9zdGRfaDYgJT4lCiAgc3ByZWFkKHNjYWxlLCBleHBlcmllbmNlKSAlPiUKICBzZWxlY3QocDdfc3ViaiwgYWJzLCBwb3IsIGRzZSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygicDdfc3ViaiIpICU+JQogIHBhcnRpYWwucigpCgpkX3N0ZF9oNiAlPiUKICBzcHJlYWQoc2NhbGUsIGV4cGVyaWVuY2UpICU+JQogIHNlbGVjdChwN19zdWJqLCBhYnMsIHBvciwgc2UpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInA3X3N1YmoiKSAlPiUKICBwYXJ0aWFsLnIoKQpgYGAKCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBBYnNvcnB0aW9uIGFzIHByaW1hcmlseSBpbmRpdmlkdWFsIGRpZmZlcmVuY2UsIHBvcm9zaXR5IGFzIHByaW1hcmlseSBjdWx0dXJhbCBkaWZmZXJlbmNlPwoKSW4gb3VyIHRoZW9yaXppbmcsIHdlIG9mdGVuIGFzc3VtZSB0aGF0IGFic29ycHRpb24gaXMgcHJpbWFyaWx5IGFuIGluZGl2aWR1YWwgZGlmZmVyZW5jZSwgd2hpbGUgcG9yb3NpdHkgaXMgcHJpbWFyaWx5IGEgY3VsdHVyYWwgZGlmZmVyZW5jZeKAlG9yIGF0IGxlYXN0IHRoYXQgYWJzb3JwdGlvbiBpcyBtb3JlIG9mIGFuIGluZGl2aWR1YWwgZGlmZmVyZW5jZSB0aGFuIGlzIHBvcm9zaXR5LiBEbyB3ZSBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMgaW4gdGhpcyBkYXRhc2V0PwoKIyMjIERvIGluZGl2aWR1YWxzIHZhcnkgbW9yZSBpbiBhYnNvcnB0aW9uIHRoYW4gcG9yb3NpdHk/CgpUaGUgZmlyc3Qgd2F5IEkgdGhvdWdodCBvZiB0byBhcHByb2FjaCB0aGlzIHF1ZXN0aW9uIGlzIHRvIGxvb2sgYXQgdGhlIGRlZ3JlZSB0byB3aGljaCBpbmRpdmlkdWFscyB2YXJ5IGluIGVhY2ggb2YgdGhlc2UgdGhyZWUgc2NhbGVzIChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KS4gV2Ugd291bGQgcHJlZGljdCB0aGF0IGFic29ycHRpb24gd291bGQgdmFyeSBtb3JlIGFjcm9zcyBpbmRpdmlkdWFscyB0aGFuIGVpdGhlciBvZiB0aGUgcG9yb3NpdHkgaW5kaWNlcyAoYWZ0ZXIgcmVzY2xhaW5nIGFsbCB0aHJlZWUgc2NhbGVzIHRvIGhhdmUgdGhlIHNhbWUgcmFuZ2UsIHdpdGhpbiBlYWNoIHNpdGUpLgoKYGBge3J9CmRfdmFyX2J5c2l0ZSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsKSAlPiUKICBtdXRhdGVfYXQodmFycyhjb250YWlucygidG90YWwiKSksIAogICAgICAgICAgICBmdW5zKHNjYWxlczo6cmVzY2FsZSguLCB0byA9IGMoMCwgMSkpKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgYyhwN19hYnNfdG90YWwsIHA3X3Bvcl90b3RhbCwgcDdfbW1fdG90YWwpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGZhY3RvcihzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlLCBwN19jdHJ5KSAlPiUKICBtdXRhdGUoc2NvcmUgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBGKSkgJT4lICMgY2VudGVyIGF0IDAKICB1bmdyb3VwKCkKYGBgCgoKYGBge3IsIGluY2x1ZGUgPSBGfQpwcmludCgiQWJzb3JwdGlvbiB2cy4gUG9yb3NpdHkgKER1bGluKSIpCnByaW50KCJPdmVyYWxsIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIpKQpwcmludCgiVVMiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCgpwcmludCgiQ2hpbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByaW50KCJBYnNvcnB0aW9uIHZzLiBNYXJ0aGEgU3RvcnkiKQpwcmludCgiT3ZlcmFsbCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iKSkKcHJpbnQoIlVTIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJVUyIpKQoKcHJpbnQoIkdoYW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcHJpbnQoIkNoaW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJDaGluYSIpKQoKcHJpbnQoIlZhbnVhdHUiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByaW50KCJEdWxpbiB2cy4gTWFydGhhIFN0b3J5IikKcHJpbnQoIk92ZXJhbGwiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIikpCnByaW50KCJVUyIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnByaW50KCJDaGluYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3J9CmRfdmFyX2J5c2l0ZSAlPiUKICBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKHZhcmlhbmNlID0gcm91bmQodmFyKHNjb3JlLCBuYS5ybSA9IFQpLCAzKSkgJT4lCiAgYXJyYW5nZShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCB2YXJpYW5jZSkKYGBgCgpBY2NvcmRpbmcgdG8gQmFydGxldHQgdGVzdHMgb2YgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2VzLCB0aGUgb25seSBzaXRlIHdoZXJlIHdlIHNlZSB0aGUgcGF0dGVybiB0aGF0IHdlJ2QgZXhwZWN0IGlzIFZhbnVhdHU6IEluZGl2aWR1YWxzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgbW9yZSBpbiB0aGVpciBBYnNvcnB0aW9uIHNjb3JlcyB0aGFuIGluIHRoZWlyIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIG9yIE1hcnRoYSBTdG9yeSBzY29yZXMuIEluIENoaW5hLCBpbmRpdmlkdWFscyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IG1vcmUgaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBNYXJ0aGEgU3Rvcnkgc2NvcmVzLCBidXQgdmFyaWFuY2Ugd2FzIGVxdWFsIGFjcm9zcyB0aGUgQWJzb3JwdGlvbiBhbmQgUG9yb3NpdHkgc2NvcmVzLiBJbiBHaGFuYSwgd2UgYWN0dWFsbHkgc2F3IHRoZSByZXZlcnNlIHBhdHRlcm4gdG8gd2hhdCB3ZSdkIGV4cGVjdDogSW5kaXZpZHVhbHMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBfbGVzc18gaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBNYXJ0aGEgU3Rvcnkgc2NvcmVzIChhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gQWJzb3JwdGlvbiBhbmQgUG9yb3NpdHkgKER1bGluKSBhbHNvIHdlbnQgaW4gdGhlIHNhbWUgZGlyZWN0bHksIGFsdGhvdWdoIGl0IHdhcyBub3Qgc2lnbmlmaWNhbnQpLgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBGfQpkX3Zhcl9ieXNpdGUgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgY29sb3IgPSBzY2FsZSwgZmlsbCA9IHNjYWxlKSkgKwogIGZhY2V0X3dyYXAofiBwN19jdHJ5LCBzY2FsZXMgPSAiZnJlZSIsIG5jb2wgPSA1KSArCiAgZ2VvbV9kZW5zaXR5KHBvc2l0aW9uID0gImlkZW50aXR5IiwgYWxwaGEgPSAwLjIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMiLAogICAgICAgeCA9ICJTY29yZSAoYWRqdXN0ZWQgdG8gc2hhcmUgY29tbW9uIHJhbmdlIGFuZCBiZSBjZW50ZXJlZCBhdCAwLCB3aXRoaW4gZWFjaCBzaXRlKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiLAogICAgICAgY29sb3IgPSAiU2NhbGUiLCBmaWxsID0gIlNjYWxlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuMywgaW5jbHVkZSA9IFR9CmRfdmFyX2J5c2l0ZSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKHZhcmlhbmNlID0gdmFyKHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjYWxlLCB5ID0gdmFyaWFuY2UsIGNvbG9yID0gc2NhbGUpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX3BvaW50KHNob3cubGVnZW5kID0gRiwgc2l6ZSA9IDMpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhbmNlIGJ5IHNjYWxlIGFuZCBzaXRlIiwKICAgICAgIHggPSAiU2NhbGUiLCB5ID0gIlZhcmlhbmNlIChhZnRlciBhZGp1c3Rpbmcgc2NvcmVzXG50byBzaGFyZSBjb21tb24gcmFuZ2UgYW5kXG5iZSBjZW50ZXJlZCBhdCAwLCB3aXRoaW4gZWFjaCBzaXRlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgaXMgX25vXyBzdHJvbmcgZXZpZGVuY2UgZnJvbSB0aGVzZSBhbmFseXNlcyBvZiBob21vZ2VuZWl0eSBvZiB2YXJpYW5jZSB0aGF0IGluZGl2aWR1YWxzICh3aXRoaW4gYSBzaXRlKSB2YXJpZWQgbW9yZSBpbiBhYnNvcnB0aW9uIHRoYW4gaW4gcG9yb3NpdHkuKioKCiMjIyBEbyBzaXRlIGRpZmZlcmVuY2VzIGFjY291bnQgZm9yIG1vcmUgb2YgdGhlIHZhcmlhbmNlIGluIHBvcm9zaXR5IHRoYW4gaW4gYWJzb3JwdGlvbj8KClRoZSBzZWNvbmQgd2F5IEkgdGhvdWdodCBvZiB0byBhcHByb2FjaCB0aGlzIHF1ZXN0aW9uIGlzIHRvIGxvb2sgYXQgdGhlIGFtb3VudCBvZiB2YXJpYW5jZSBleHBsYWluZWQgYnkgc2l0ZSBkaWZmZXJlbmNlcyBmb3IgaW4gZWFjaCBvZiB0aGVzZSB0aHJlZSBzY2FsZXMgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpLiBXZSB3b3VsZCBwcmVkaWN0IHRoYXQgc2l0ZSBkaWZmZXJlbmNlcyB3b3VsZCBleHBsYWluIG1vcmUgb2YgdGhlIHZhcmlhbmNlIGluIHBvcm9zaXR5IHRoYW4gaW4gYWJzb3JwdGlvbiAobm8gcmVzY2FsaW5nIG5lY2Vzc2FyeSBoZXJlKS4KCmBgYHtyfQpyN19hYnMgPC0gbG0ocDdfYWJzX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgICBkMCAlPiUgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSwKICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKCnI3X3BvciA8LSBsbShwN19wb3JfdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgIGQwICU+JSBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQoKcjdfbW0gPC0gbG0ocDdfbW1fdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgZDAgJT4lIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X21tX3RvdGFsKSwKICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCk51bWVyaWNhbGx5IHNwZWFraW5nLCAqKnRoaXMgYXBwZWFycyB0byBiZSB0cnVlOiBJbiBhIHNldCBvZiBsaW5lYXIgbW9kZWxzLCBzaXRlIGRpZmZlcmVuY2VzIGV4cGxhaW4gb25seSBgciBzdW1tYXJ5KHI3X2Ficykkci5zcXVhcmVkICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSB2YXJpYW5jZSBpbiBBYnNvcnB0aW9uIHNjb3JlcywgdnMuIGByIHN1bW1hcnkocjdfcG9yKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIGFuZCBgciBzdW1tYXJ5KHI3X21tKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIE1hcnRoYSBTdG9yeSBzY29yZXMuKioKCkhlcmUsIEknbGwgdHJ5IHRvIGNvbXBhcmUgdGhlc2Ugc3RhdGlzdGljYWxseSAodXNpbmcgc2NvcmVzIGZvciBlYWNoIHNjYWxlIHRoYXQgaGF2ZSBiZWVuIHN0YW5kYXJkaXplZCwgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CmRfaDdfY29tcGFyZSA8LSBkX3N0ZCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtc3RhcnRzX3dpdGgoInA3IikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oN19jb21wYXJlJHA3X2N0cnkpIDwtIGNiaW5kKG5vblVTX1VTID0gYygtNCwgMSwgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hWVF9USENIID0gYygwLCAxLCAtMSwgLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIX1ZUID0gYygwLCAxLCAwLCAwLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhfQ0ggPSBjKDAsIDAsIC0xLCAxLCAwKSkKY29udHJhc3RzKGRfaDdfY29tcGFyZSRzY2FsZSkgPC0gY2JpbmQocG1tX2FicyA9IGMoLTIsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3JfbW0gPSBjKDAsIC0xLCAxKSkKCnI3X2NvbXBhcmUgPC0gbG1lcihzY29yZSB+IHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfaDdfY29tcGFyZSkKIyBzdW1tYXJ5KHI3X2NvbXBhcmUpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI3X2NvbXBhcmUpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyg4OjExLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudDogSSB0aGluayB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhhdCBJIGhhdmUgYm9sZGVkIGluIHRoZSB0YWJsZSBhYm92ZSBzdWdnZXN0IHRoYXQgdGhlIGRpZmZlcmVuY2VzIGFjcm9zcyBzaXRlcyAoaGVyZSwgY29kZWQgYXMgZGlmZmVyZW5jZXMgYmV0d2VlbiAoYSkgbm9uLVVTIGFuZCBVUyBzaXRlcywgKGIpIEdoYW5hIGFuZCBWYW51YXR1IHZzLiBUaGFpbGFuZCBhbmQgQ2hpbmEsIChjKSBHaGFuYSB2cy4gVmFudWF0dSwgYW5kIChkKSBUaGFpbGFuZCB2cy4gQ2hpbmEpIHdlcmUgZ2VuZXJhbGx5IGV4YWdnZXJhdGVkIGluIHRoZSB0d28gcG9yb3NpdHkgc2NhbGVzIGNvbXBhcmVkIHRvIHRoZSBBYnNvcnB0aW9uIHNjYWxlLCBhbmQgdGhlc2Ugc2VlbXMgdG8gYmUgdHJ1ZSBmcm9tIHRoZSBmb2xsb3dpbmcgcGxvdDoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9oN19jb21wYXJlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCguIH4gc2NhbGUpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhYmlsaXR5IGFjcm9zcyBzaXRlcyBieSBzY2FsZSIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgX2lzXyBwcmV0dHkgc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgcmVzcmVzc2lvbiBhbmFseXNlcyB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgYWNjb3VudGVkIGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24uKioKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUmVsaWdpb3NpdHkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKRG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSwgb24gdGhlIG9uZSBoYW5kLCBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBzdGlsbCBob2xkIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIHBhcnRpY2lwYW50cycgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eT8KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45fQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgICBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RlbV9ob3cuc3BydC5yZWxnLCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIiwgCiAgICAgICB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KZF9zdGRfcmVsaWcgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykgJT4lCiAgbXV0YXRlKHJlbGlnX3N0ZCA9IHNjYWxlKHA3X2RlbV9ob3cuc3BydC5yZWxnLCBzY2FsZSA9IFQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQpCgpkX2g4IDwtIGRfc3RkX3JlbGlnICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX2g4JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfaDgkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSAqIHA3X2N0cnkgKyAKICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX2g4KQojIHN1bW1hcnkocjhfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyOjQsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpyOF9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHJlbGlnX3N0ZCAqIHNjYWxlICogcDdfY3RyeSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9oOCkKIyBzdW1tYXJ5KHI4X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDI6NCwgYm9sZCA9IFQpCmBgYAoKRm9sbG93aW5nIG90aGVyIGFuYWx5c2lzLCBJIGV4YW1pbmVkIHRoaXMgc2VwYXJhdGVseSB1c2luZyBQb3Jvc2l0eSAoRHVsaW4pIGFuZCBNYXJ0aGEgU3RvcnkgYXMgaW5kaWNlcyBvZiBwb3Jvc2l0eS4gSW4gYm90aCBjYXNlcywgcmVsaWdpb3NpdHkgd2FzIGEgc2lnbmlmaWNhbnQgcG9zaXRpdmUgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIChhcyB3ZSdkIGV4cGVjdCkuIEJ1dCwgaW1wb3J0YW50bHksIHRoZSBtYWluIGVmZmVjdHMgb2YgcG9yb3NpdHkgcmVtYWluZWQgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBib3RoIGFuYWx5c2VzLCBldmVuIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBwYXJ0aWNpcGFudHMnIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLiBUaGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiByZW1haW5lZCBzaWduaWZpY2FudGx5IHBvc2l0aXZlIHdoZW4gcG9yb3NpdHkgd2FzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSAoc2Vjb25kIHRhYmxlKSwgYnV0IG5vdCB3aGVuIHBvcm9zaXR5IHdhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoaXMgZWZmZWN0IHRvIGJlICJtYXJnaW5hbGx5IHNpZ25pZmljYW50IikuCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgcmVsaWdpb3NpdHkgZG9lcyBfbm90XyBmdWxseSAiZXhwbGFpbiBhd2F5IiB0aGUgb2JzZXJ2ZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LCBvbiB0aGUgb25lIGhhbmQsIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgb24gdGhlIG90aGVyLioqCgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpICU+JQogIG11dGF0ZShyZWxpZ19zdGQgPSBzY2FsZShwN19kZW1faG93LnNwcnQucmVsZywgc2NhbGUgPSBUKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSkKCmRfaDhfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZV9yZWxpZyAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oOF9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9oOF9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X2J5c2l0ZV9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpCgpyOF9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2doKQoKcjhfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjhfYnlzaXRlX3Bvcl90aCkKCnI4X2J5c2l0ZV9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpCgpyOF9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyOF9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdXMpCgpyOF9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpCgpyOF9ieXNpdGVfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdGgpCgpyOF9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fY2gpCgpyOF9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjhfYnlzaXRlX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkkgc2VlIHR3byBnZW5lcmFsIHBhdHRlcm5zIGhlcmU6CgoxLiBJbiB0aGUgVVMsIFRoYWksIGFuZCBDaGluZXNlIHNhbXBsZXMsIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgcmVsaWdpb3NpdHkgYWxsIHJlbWFpbiBzaWduaWZpY2FudCBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHdoZW4gY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIgaW4gb25lIG9mIHRoZSB0d28gYW5hbHlzZXMgcmVwb3J0ZWQgYWJvdmUuIEluIHRoZSBvdGhlciBhbmFseXNpcywgdGhlcmUgaXMgc29tZSBldmlkZW5jZSBmb3IgInN3YW1waW5nIG91dCI6IEluIHRoZSBVUyBhbmQgQ2hpbmVzZSBzYW1wbGVzLCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzOyBhbmQgaW4gVGhhaWxhbmQsIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRob3VnaCwgKipJJ2Qgc2F5IHRoaXMgaXMgbW9kZXJhdGUgZXZpZGVuY2UgdGhhdCByZWxpZ2lvc2l0eSBkb2VzIF9ub3RfIGZ1bGx5ICJleHBsYWluIGF3YXkiIHRoZSBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIHRoZXNlIHRocmVlIHNpdGVzICh0aGUgVVMsIFRoYWlsYW5kLCBhbmQgQ2hpbmEpLioqCjIuIEluIEdoYW5hIGFuZCBWYW51YXR1LCBvbmx5IHJlbGlnaW9zaXR5IHJlbWFpbnMgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgaW4gdGhlc2UgYW5hbHlzZXMuICoqVGhpcyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBldmlkZW5jZSB0aGF0IHJlbGlnaW9zaXR5IF9kb2VzXyAiZXhwbGFpbiBhd2F5IiB0aGUgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiB0aGVzZSB0d28gKGRldm91dGx5IENocmlzdGlhbikgc2l0ZXMgKEdoYW5hIGFuZCBWYW51YXR1KS4qKgoKVG8gaGVscCB3aXRoIG91ciBpbnRlcnByZXRhdGlvbiwgaGVyZSBhcmUgdGhlIGNvcnJlbGF0aW9ucyB3aXRoIHJlbGlnaW9zaXR5LCB0aGlzIHRpbWUgbG9va2luZyBhdCBzY29yZXMgc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGU6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnX2NvciA8LSBkX3N0ZF9ieXNpdGVfcmVsaWcgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcmVsaWdfc3RkLCBhYnMsIHBvciwgbW0sIGRzZSwgc2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShhYnMgPSBjb3IocmVsaWdfc3RkLCBhYnMsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgcG9yID0gY29yKHJlbGlnX3N0ZCwgcG9yLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIG1tID0gY29yKHJlbGlnX3N0ZCwgbW0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgZHNlID0gY29yKHJlbGlnX3N0ZCwgZHNlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIHNlID0gY29yKHJlbGlnX3N0ZCwgc2UsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBjb3JfcmVsaWcsIC1wN19jdHJ5KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX3JlbGlnICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHJlbGlnX3N0ZCwgYWJzLCBwb3IsIG1tLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCByZWxpZ19zdGQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGRfYnlzaXRlX3JlbGlnX2NvcikgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlbGlnX3N0ZCwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlLCBjb3JfcmVsaWcpICU+JSAKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1pbl94ID0gbWluKHJlbGlnX3N0ZCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heF95ID0gbWF4KHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUgCiAgICAgICAgICAgICAgIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoeCA9IG1pbihtaW5feCkpICU+JQogICAgICAgICAgICAgICBncm91cF9ieShzY2FsZSkgJT4lCiAgICAgICAgICAgICAgIG11dGF0ZSh5ID0gbWF4KG1heF95KSkgJT4lCiAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiciA9ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChyb3VuZChjb3JfcmVsaWcsIDIpLCBuc21hbGwgPSAyKSksCiAgICAgICAgICAgICAgICAgeCA9IHgsIHkgPSB5KSwKICAgICAgICAgICAgIGhqdXN0ID0gMCwgdmp1c3QgPSAxLCBhbHBoYSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiU2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXaGljaCBleHBlcmllbmNlcyBhcmUgcHJlZGljdGVkIGJ5IGFic29ycHRpb24gdnMuIHBvcm9zaXR5PwoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9leHAgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKICBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpIAogICMgIyByZXNjYWxlIGV2ZXJ5dGhpbmcgdG8gcnVuIGZyb20gMC0xCiAgIyBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGVzOjpyZXNjYWxlKC4sIHRvID0gYygwLCAxKSkpKQpgYGAKCmBgYHtyfQpkX2V4cF9jb3IgPC0gZF9leHAgJT4lIAogIHNlbGVjdChwN19zdWJqLCBwN19hYnNfdG90YWwsIAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfYWJzX3RvdGFsKSkgJT4lCiAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShhYnNfY29yID0gY29yKHA3X2Fic190b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSAlPiUKICBmdWxsX2pvaW4oZF9leHAgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChwN19zdWJqLCBwN19wb3JfdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfcG9yX3RvdGFsKSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3JfY29yID0gY29yKHA3X3Bvcl90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0ZW4gbW9zdCBzdHJvbmdseSBjb3JyZWxhdGVkIGl0ZW1zIGZvciBlYWNoIG9mIG91ciB0aHJlZSBwcmVkaWN0b3JzIG9mIGludGVyZXN0IChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KToKCmBgYHtyLCBpbmNsdWRlID0gVH0KYmluZF9yb3dzKGRfZXhwX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigxMCwgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgZF9leHBfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpKSAlPiUKICBhcnJhbmdlKHdoaWNoX2NvciwgZGVzYyhhYnMoY29yKSkpICU+JQogIHNlbGVjdChjb3IsIHF1ZXN0aW9uX3RleHQsIHNjYWxlKSAlPiUKICByZW5hbWUoQ29ycmVsYXRpb24gPSBjb3IsIGBRdWVzdGlvbiB0ZXh0YCA9IHF1ZXN0aW9uX3RleHQsIFNjYWxlID0gc2NhbGUpICU+JQogIGthYmxlKGRpZ2l0cyA9IDMpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJBYnNvcnB0aW9uIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIlBvcm9zaXR5IChEdWxpbikiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIk1hcnRoYSBTdG9yeSIsIDIxLCAzMCkKYGBgCgpBbmQgaGVyZSdzIGEgdmlzdWFsaXphdGlvbiBvZiB0aGUgY29ycmVsYXRpb25zIG9mIHRoZXNlIHRocmVlIHByZWRpY3RvcnMgd2l0aCBhbGwgImV4cGVyaWVuY2UiIGl0ZW1zIGluIHRoaXMgcGFja2V0IChzcGlyaXR1YWwgYW5kIHNlY3VsYXIpOgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfZXhwX2NvciAlPiUKICAgICAgICAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA4MCkpLAogICAgICAgYWVzKHggPSBjb3IsIHkgPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIGRlc2Mob3JkZXIpKSwgCiAgICAgICAgICAgY29sb3IgPSB3aGljaF9jb3IpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoeCA9ICJQZWFyc29uIGNvcnJlbGF0aW9uICh0aGVvcmV0aWNhbCByYW5nZTogLTEgdG8gMSkiLAogICAgICAgeSA9ICJRdWVzdGlvbiAoYnkgc2NhbGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciIpCmBgYAoKIyMjIENvbnNpZGVyaW5nIGVhY2ggc2l0ZSBpbmRpdmlkdWFsbHkKCmBgYHtyfQpkX2V4cF9ieXNpdGUgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgd2l0aGluIGVhY2ggc2l0ZQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZSguLCBzY2FsZSA9IFQpKSkgJT4lCiAgIyAjIHJlc2NhbGUgZXZlcnl0aGluZyB0byBydW4gZnJvbSAwLTEKICAjIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfZXhwX2J5c2l0ZV9jb3IgPC0gZF9leHBfYnlzaXRlICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwX2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfZHNlXyIpLCBjb250YWlucygiX3NlXyIpLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl91bmV2XyIpLCBjb250YWlucygiX2V4c2VuXyIpKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcl9jb3IgPSBjb3IocDdfcG9yX3RvdGFsLCByZXNwb25zZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBmdWxsX2pvaW4oZF9leHBfYnlzaXRlICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0aHJlZSBtb3N0IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgaXRlbXMgZm9yIGVhY2ggb2Ygb3VyIHRocmVlIHByZWRpY3RvcnMgb2YgaW50ZXJlc3QgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpOgoKYGBge3IsIGluY2x1ZGUgPSBUfQpiaW5kX3Jvd3MoZF9leHBfYnlzaXRlX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigzLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2J5c2l0ZV9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCkpICU+JQogIGFycmFuZ2Uod2hpY2hfY29yLCBwN19jdHJ5LCBkZXNjKGFicyhjb3IpKSkgJT4lCiAgc2VsZWN0KHA3X2N0cnksIGNvciwgcXVlc3Rpb25fdGV4dCwgc2NhbGUpICU+JQogIHJlbmFtZShTaXRlID0gcDdfY3RyeSwgQ29ycmVsYXRpb24gPSBjb3IsIAogICAgICAgICBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjIpICU+JQogIGdyb3VwX3Jvd3MoIkFic29ycHRpb24iLCAxLCAxNSkgJT4lCiAgZ3JvdXBfcm93cygiUG9yb3NpdHkgKER1bGluKSIsIDE2LCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiTWFydGhhIFN0b3J5IiwgMzEsIDQ1KQpgYGAKCkFuZCBoZXJlJ3MgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb3JyZWxhdGlvbnMgb2YgdGhlc2UgdGhyZWUgcHJlZGljdG9ycyB3aXRoIGFsbCAiZXhwZXJpZW5jZSIgaXRlbXMgaW4gdGhpcyBwYWNrZXQgKHNwaXJpdHVhbCBhbmQgc2VjdWxhcik6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuOCwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDgwKSksCiAgICAgICBhZXMoeCA9IGNvciwgeSA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBjb2xvciA9IHdoaWNoX2NvcikpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicyh4ID0gIlBlYXJzb24gY29ycmVsYXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAtMSB0byAxKSIsCiAgICAgICB5ID0gIlF1ZXN0aW9uIChieSBzY2FsZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5OiBnb29kIHZzLiBiYWQgZW1vdGlvbnMKCldoaWNoIGVtb3Rpb25zIHdlcmUgY29uc2lkZXJlZCBtb3N0ICJwb3RlbnQiIGluIG91ciBtZWFzdXJlcyBvZiBwb3Jvc2l0eT8KCiMjIyBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pCgpgYGB7cn0KZF9wb3IgPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfcG9yXyIpKSAlPiUKICBzZWxlY3QoLWMoZW5kc193aXRoKCJfY2F0IiksIGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUodmFsID0gY2FzZV93aGVuKHF1ZXN0aW9uICVpbiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoInA3X3Bvcl9qb2Iud2lzaCIsICJwN19wb3JfY29uc2x0LnVuc2VlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19wb3JfbWlyY2wucHJheWVyIiwgInA3X3Bvcl9wcnkuZGVhZC5iYWNrIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9mYWxsLmluLmxvdiIsICJwN19wb3JfdGhncy5oZWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfcG9yX3Zpc3VhbGl6YXRpb24iKSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24gJWluJSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYygicDdfcG9yX3RoZ3MuaHJ0IiwgInA3X3Bvcl93aWZpLnRoZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfcG9yX2FuZ3IuY250cmwiLCAicDdfcG9yX3NwcnQuZW52eSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19wb3JfcmVhZC50aGdzIiwgInA3X3Bvcl9zdHJlLnNwb2lsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9zcGtuLmN1cnNlIiwgInA3X3Bvcl9jdXJzZS5zaWNrIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9zcHJ0LnB1dC50aGdzIikgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgICAgICAgdmFsID0gZmFjdG9yKHZhbCwgbGV2ZWxzID0gYygibmVnYXRpdmUiLCAicG9zaXRpdmUiKSkpCgojIGNvbnRyYXN0cyhkX3BvciRwN19jdHJ5KSA8LSBjb250cmFzdHNfY3RyeV9lZmYKY29udHJhc3RzKGRfcG9yJHZhbCkgPC0gY2JpbmQoIl9uZWdfcG9zIiA9IGMoMCwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjcsIGluY2x1ZGUgPSBUfQpwb3JfdmFsX3Bsb3RfYSA8LSBkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHZhbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2YWwsIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCB2YWwpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMiwgMC4yNSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIFBvcm9zaXR5IChEdWxpbikgcXVlc3Rpb25zIGJ5IHZhbGVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiXG5WYWxlbmNlIGNvZGVkIGJ5IFRNTFxuUmVzcG9uc2Ugb3B0aW9uczogMCA9IGl0IGRvZXMgbm90IGhhcHBlbiwgMSA9IGl0IG1pZ2h0IGhhcHBlbiwgMiA9IGl0IGRlZmluaXRlbHkgaGFwcGVuc1xuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlZhbGVuY2UiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgpwb3JfdmFsX3Bsb3RfYiA8LSBkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHZhbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCB2YWwsIHZhbCkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IHZhbCwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBwN19jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjEpKSArCiAgbGFicyh0aXRsZSA9ICJNZWFuIHJlc3BvbnNlcyB0byBQb3Jvc2l0eSAoRHVsaW4pIHF1ZXN0aW9ucyBieSB2YWxlbmNlIiwKICAgICAgIHN1YnRpdGxlID0gIlxuVmFsZW5jZSBjb2RlZCBieSBUTUxcblJlc3BvbnNlIG9wdGlvbnM6IDAgPSBpdCBkb2VzIG5vdCBoYXBwZW4sIDEgPSBpdCBtaWdodCBoYXBwZW4sIDIgPSBpdCBkZWZpbml0ZWx5IGhhcHBlbnNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJWYWxlbmNlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKcGxvdF9ncmlkKHBvcl92YWxfcGxvdF9hLCBwb3JfdmFsX3Bsb3RfYiwgbmNvbCA9IDEpCmBgYAoKVGhlIGl0ZW1zIGNvZGVkIGJ5IFRNTCBhcyAibmVnYXRpdmUiIHNlZW0gdG8gaGF2ZSBlbGljaXRlZCBzb21ld2hhdCBzdHJvbmdlciBlbmRvcnNlbWVudHMgdGhhbiB0aGUgaXRlbXMgY29kZWQgYXMgInBvc2l0aXZlLCIgdGhvdWdoIHRoaXMgZGlmZmVyZW5jZSBhcHBlYXJzIHRvIGhhdmUgYmVlbiBxdWl0ZSBzbWFsbCAobWF5YmUgbiBvdCBzaWduaWZpY2FudCkgaW4gdGhlIFVTIGFuZCBDaGluYS4gCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CldoYXQgYWJvdXQgd2hlbiB3ZSBsb29rIGF0IGluZGl2aWR1YWwgcXVlc2l0b25zPwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQpkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChwYXN0ZTAodG91cHBlcih2YWwpLCAiOiAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0KSwgMzUpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCAKICAgICAgICAgICAgIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdGV4dCwgbmNvbCA9IDMpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJtZWFuX3Njb3JlIiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjI1KSkgKwogIGxhYnModGl0bGUgPSAiTWVhbiByZXNwb25zZXMgdG8gUG9yb3NpdHkgKER1bGluKSBxdWVzdGlvbnMgYnkgdmFsZW5jZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJcblZhbGVuY2UgY29kZWQgYnkgVE1MXG5SZXNwb25zZSBvcHRpb25zOiAwID0gaXQgZG9lcyBub3QgaGFwcGVuLCAxID0gaXQgbWlnaHQgaGFwcGVuLCAyID0gaXQgZGVmaW5pdGVseSBoYXBwZW5zXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIikKYGBgCgpJJ20gbm90IGdvaW5nIHRvIGNvbW1lbnQgb24gdGhpcyBhdCB0aGUgbW9tZW50LiAoQnV0IG5vdGUgdGhhdCBUaGFpbGFuZCB3YXMgbWlzc2luZyBxdWVzdGlvbiAjMTMgaW4gdGhpcyBzY2FsZSAtIHRocm91Z2hvdXQgdGhpcyBkb2N1bWVudCwgc2NvcmVzIGZvciBUaGFpbGFuZCBoYXZlIGJlZW4gYWRqdXN0ZWQgYWNjb3JkaW5nbHkgc28gdGhhdCBUaGFpIHBhcnRpY2lwYW50cyBkbyBub3QgaGF2ZSBhcnRpZmljYWxseSBkZWZsYXRlZCBQb3Jvc2l0eSBzY29yZXMhKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDIuMiwgaW5jbHVkZSA9IFR9CmRfcG9yICU+JSAKICBmaWx0ZXIoIWlzLm5hKHZhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgcXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShtZWFuX3Njb3JlID0gbWVhbihyZXNwb25zZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc3VtX3Njb3JlID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbGVmdF9qb2luKHZhcl9rZXkgJT4lIHNlbGVjdChxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpKSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHBhc3RlMCh0b3VwcGVyKHZhbCksICI6ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQpLCAzNSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCAKICAgICAgICAgICAgIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdGV4dCwgbmNvbCA9IDMsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIsIDAuMSkpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlxuVmFsZW5jZSBjb2RlZCBieSBUTUxcblJlc3BvbnNlIG9wdGlvbnM6IDAgPSBpdCBkb2VzIG5vdCBoYXBwZW4sIDEgPSBpdCBtaWdodCBoYXBwZW4sIDIgPSBpdCBkZWZpbml0ZWx5IGhhcHBlbnNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJTaXRlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIE1hcnRoYSBzdG9yeQoKYGBge3J9CmRfbW0gPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfbW1fIikpICU+JQogIHNlbGVjdCgtYyhlbmRzX3dpdGgoIl9jYXQiKSwgY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShlbW8gPSBjYXNlX3doZW4oZ3JlcGwoIl9hbmdfIiwgcXVlc3Rpb24pIH4gImFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJfY2FyXyIsIHF1ZXN0aW9uKSB+ICJjYXJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl9lbnZfIiwgcXVlc3Rpb24pIH4gImVudnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICB2YWwgPSBjYXNlX3doZW4oZW1vICVpbiUgYygiYW5nZXIiLCAiZW52eSIpIH4gIm5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVtbyA9PSAiY2FyaW5nIiB+ICJwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgIGVtbyA9IGZhY3RvcihlbW8sIGxldmVscyA9IGMoImFuZ2VyIiwgImVudnkiLCAiY2FyaW5nIikpLAogICAgICAgICB2YWwgPSBmYWN0b3IodmFsLCBsZXZlbHMgPSBjKCJuZWdhdGl2ZSIsICJwb3NpdGl2ZSIpKSkKCiMgY29udHJhc3RzKGRfbW0kcDdfY3RyeSkgPC0gY29udHJhc3RzX2N0cnlfZWZmCmNvbnRyYXN0cyhkX21tJGVtbykgPC0gY2JpbmQoIl9uZWdfcG9zIiA9IGMoMSwgMSwgLTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfZW52X2FuZyIgPSBjKC0xLCAxLCAwKSkKY29udHJhc3RzKGRfbW0kdmFsKSA8LSBjYmluZCgiX25lZ19wb3MiID0gYygwLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNywgaW5jbHVkZSA9IFR9Cm1tX2Vtb19wbG90X2EgPC0gZF9tbSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlbW8pKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIGVtbykgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCBlbW8pICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMywgMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgZW1vdGlvbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJFbW90aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKbW1fZW1vX3Bsb3RfYiA8LSBkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgZW1vKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJtZWFuX3Njb3JlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZW1vLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+IHA3X2N0cnksIG5jb2wgPSA1LCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDQsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDAuMjUpKSArCiAgbGFicyh0aXRsZSA9ICIoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJFbW90aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKcGxvdF9ncmlkKG1tX2Vtb19wbG90X2EsIG1tX2Vtb19wbG90X2IsIG5jb2wgPSAxKQpgYGAKClRvIG15IGV5ZXMsIHRoZXJlIGlzIG5vIHNpbmdsZSBwYXR0ZXJuIGhlcmU6IEluIHRoZSBVUyBhbmQgQ2hpbmEsIGNhcmluZyBzZWVtcyB0byBoYXZlIGVsaWNpdGVkIHN0cm9uZ2VyIHJlc3BvbnNlcyB0aGFuIHRoZSBvdGhlciBlbW90aW9uczsgaW4gVmFudWF0dSBhbmQgcG9zc2libHkgVGhhaWxhbmQsIGFuZ2VyIHNlZW1zIHRvIGhhdmUgZWxpY3RlZCBzdHJvbmdlciByZXNwb25zZXM7IGluIEdoYW5hLCB0aGUgdGhyZWUgZW1vdGlvbnMgc2VlbSB0byBoYXZlIGVsaWNpdGVkIHJvdWdobHkgc2ltaWxhciByZXNwb25zZXMuCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CldoYXQgYWJvdXQgd2hlbiB3ZSBsb29rIGF0IGluZGl2aWR1YWwgcXVlc2l0b25zPwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjIsIGluY2x1ZGUgPSBUfQpkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vLCBxdWVzdGlvbikgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSAlPiUgc2VsZWN0KHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0LCBvcmRlcikpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNDApLAogICAgICAgICBxdWVzdGlvbl90eXBlID0gY2FzZV93aGVuKAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX2ZlZWwuaHVydCIsICJwN19tbV9jYXJfZmVsLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9mZWVsLmh1cnQiKSB+IAogICAgICAgICAgICAgImEuIGh1cnQvaGVscCB3aXRoIGZlZWxpbmdzIiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ190aGdzLmh1cnQiLCAicDdfbW1fY2FyX3Roay5uby5wciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfdGhncy5odXJ0IikgfiAKICAgICAgICAgICAgICJiLiBodXJ0L2hlbHAgd2l0aCBqdXN0IHRob3VnaHRzIiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19zcHJ0Lmh1cnQiLCAicDdfbW1fY2FyX3NwcnQuaGVscCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc3BydC5odXJ0IikgfiAKICAgICAgICAgICAgICJjLiBodXJ0L2hlbHAgdmlhIHNwaXJpdCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfcGh5c2ljYWwiLCAicDdfbW1fY2FyX3BoeXNpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9waHlzaWNhbCIpIH4gCiAgICAgICAgICAgICAiZC4gcGh5c2ljYWxseSBzaWNrL3dlbGwiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NpY2tuZXNzIiwgInA3X21tX2Nhcl9jdXJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3NpY2tuZXNzIikgfiAKICAgICAgICAgICAgICJlLiBjYXVzZSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIAogICAgICAgICAgICAgeSA9IG1lYW5fc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSB+IHA3X2N0cnkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdHlwZSwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDEpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgaXRlbSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJRdWVzdGlvbiB0eXBlIiwKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDEuMiwgaW5jbHVkZSA9IFR9CmRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8sIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA0MCksCiAgICAgICAgIHF1ZXN0aW9uX3R5cGUgPSBjYXNlX3doZW4oCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfZmVlbC5odXJ0IiwgInA3X21tX2Nhcl9mZWwubm8ucHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X2ZlZWwuaHVydCIpIH4gCiAgICAgICAgICAgICAiYS4gaHVydC9oZWxwIHdpdGggZmVlbGluZ3MiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3RoZ3MuaHVydCIsICJwN19tbV9jYXJfdGhrLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl90aGdzLmh1cnQiKSB+IAogICAgICAgICAgICAgImIuIGh1cnQvaGVscCB3aXRoIGp1c3QgdGhvdWdodHMiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NwcnQuaHVydCIsICJwN19tbV9jYXJfc3BydC5oZWxwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9zcHJ0Lmh1cnQiKSB+IAogICAgICAgICAgICAgImMuIGh1cnQvaGVscCB2aWEgc3Bpcml0IiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19waHlzaWNhbCIsICJwN19tbV9jYXJfcGh5c2ljYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3BoeXNpY2FsIikgfiAKICAgICAgICAgICAgICJkLiBwaHlzaWNhbGx5IHNpY2svd2VsbCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfc2lja25lc3MiLCAicDdfbW1fY2FyX2N1cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc2lja25lc3MiKSB+IAogICAgICAgICAgICAgImUuIGNhdXNlIikpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgZW1vLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90eXBlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgY29sb3IgPSBwN19jdHJ5LCBzaGFwZSA9IGVtbykpICsKICBmYWNldF9ncmlkKHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDAuNSkpICsKICB0aGVtZSgjYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlF1ZXN0aW9uIHR5cGUiLAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIiwgCiAgICAgICBzaGFwZSA9ICJFbW90aW9uIikKYGBgCgpUaGlzIGNvbXBsaWNhdGVzIChhbmQgdG8gbXkgbWluZCwgY2xhcmlmaWVzKSB0aGUgcGljdHVyZSBzb21ld2hhdC4gSGVyZSBhcmUgYSBmZXcgb2JzZXJ2YXRpb25zOgoKLSBJbiBzb21lIHNpdGVzIHBhcnRpY2lwYW50cyB3ZXJlIHByZXR0eSBjb25zaXN0ZW50IGFjcm9zcyBxdWVzdGlvbnMgaW4gdGVybXMgb2YgdGhlICJvcmRlcmluZyIgb2YgZW1vdGlvbnM6IGUuZy4uLi4KICAgIC0gSW4gdGhlIFVTIChsZWZ0bW9zdCBjb2x1bW4pLCBjYXJpbmcgd2FzIHZpcnR1YWxseSBhbHdheXMgbW9zdCBwb3RlbnQKICAgIC0gSW4gQ2hpbmEgKGZvdXJ0aCBjb2x1bW4gZnJvbSBsZWZ0KSwgY2FyaW5nIHdhcyBhbG1vc3QgYWx3YXlzIG1vc3QgcG90ZW50LCB3aXRoIHRoZSBtYWpvciBleGNlcHRpb24gb2YgcXVlc3Rpb24gImQiICh3aGV0aGVyIHRoZSBlbW90aW9uIGNvdWxkIG1ha2UgdGhlIGVtb3RlciBzaWNrL3dlbGwpCiAgICAtIEluIFZhbnVhdHUgKHJpZ2h0bW9zdCBjb2x1bW4pIGFuZ2VyIHdhcyBhbG1vc3QgYWx3YXlzIG1vc3QgcG90ZW50ICh3aXRoIHRoZSBtYWpvciBleGNlcHRpb24gb2YgcXVlc3Rpb24gImMiICh3aGV0aGVyIGEgc3Bpcml0IGNvdWxkIHVzZSB0aGUgZW1vdGlvbiB0byBodXJ0L2hlbHApCi0gSW4gb3RoZXIgc2l0ZXMgcGFydGljaXBhbnRzIGRpZmZlcmVudGlhdGVkIG1vcmUgYmV0d2VlbiBkaWZmZXJlbnQga2luZHMgb2YgcXVlc3Rpb25zOiBlLmcuLi4uIAogICAgLSBJbiBUaGFpbGFuZCwgKG1pZGRsZSBjb2x1bW4pIGFuZ2VyIHdhcyBtb3JlIHBvdGVudCBmb3IgcXVlc3Rpb25zICJiIiBhbmQgImQsIiB3aGlsZSBjYXJpbmcgd2FzIGNsZWFybHkgbW9yZSBwb3RlbnQgZm9yIHF1ZXN0aW9uICJlIgotIFNvbWUgcXVlc3Rpb25zIGVsaWNpdGVkIHNpbWlsYXIgIm9yZGVyaW5ncyIgb2YgZW1vdGlvbnMgYWNyb3NzIHNpdGVzOiBlLmcuLi4uCiAgICAtIEZvciBxdWVzdGlvbiAiYyIgKHdoZXRoZXIgYSBzcGlyaXQgY291bGQgdXNlIHRoZSBlbW90aW9uIHRvIGh1cnQvaGVscCksIHdoZW4gc2l0ZXMgZGlmZmVyZW50aWF0ZWQgYWNyb3NzIGVtb3Rpb25zLCBpdCB0ZW5kZWQgdG8gYmUgaW4gdGhlIGRpcmVjdGlvbiBvZiBjYXJpbmcgYmVpbmcgbW9zdCBwb3RlbnQgKGJ1dCBwZW9wbGUgZGlkbid0IHJlYWxseSBkaWZmZXJlbnRpYXRlIGluIEdoYW5hIG9yIFRoYWlsYW5kKQogICAgLSBGb3IgcXVlc3Rpb24gImQiICh3aGV0aGVyIHRoZSBlbW90aW9uIGNvdWxkIG1ha2UgdGhlIGVtb3RlciBzaWNrL3dlbGwpLCB3aGVuIHNpdGVzIGRpZmZlcmVudGlhdGVkIGFjcm9zcyBlbW90aW9ucywgaXQgdGVuZGVkIHRvIGJlIGluIHRoZSBkaXJlY3Rpb24gb2YgYW5nZXIgYmVpbmcgbW9zdCBwb3RlbnQgKGJ1dCBwZW9wbGUgZGlkbid0IHJlYWxseSBkaWZmZXJlbnRpYXRlIGluIHRoZSBVUykKICAgIC0gRm9yIHF1ZXN0aW9uICJlIiAod2hldGhlciwgaWYgdGhlIG90aGVyIHBlcnNvbiBnb3Qgc2ljay93ZWxsLCB0aGUgZW1vdGVyJ3MgZW1vdGlvbiBjb3VsZCBiZSB0aGUgY2F1c2UpLCB3aGVuIHNpdGVzIGRpZmZlcmVudGlhdGVkIGFjcm9zcyBlbW90aW9ucywgaXQgdGVuZGVkIHRvIGJlIGluIHRoZSBkaXJlY3Rpb24gb2YgY2FyaW5nIGJlaW5nIG1vc3QgcG90ZW50IChidXQgcGVvcGxlIGRpZG4ndCByZWFsbHkgZGlmZmVyZW50aWF0ZSBpbiBWYW51YXR1KQotIE90aGVyIHF1ZXN0aW9ucyBlbGljaXRlZCBkaWZmZXJlbnQgIm9yZGVyaW5ncyIgb2YgZW1vdGlvbnMgYWNyb3NzIHNpdGVzIChxdWVzaXRvbiAiYSwiIHdoZXRoZXIgdGhlIGVtb3RlciBjb3VsZCBodXJ0L2hlbHAgdGhlIG90aGVyIHdpdGggdGhlaXIgZW1vdGlvbjsgYW5kIHF1ZXN0aW9uICJiLCIgd2hldGhlciB0aGUgZW1vdGVyIGNvdWxkIGh1cnQvaGVscCB0aGUgb3RoZXIganVzdCBieSB0aGlua2luZyBlbW90aW9uYWwgdGhvdWdodHMpCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBTaXRlIGRpZmZlcmVuY2VzIGluICJjb250cm9sIiBzY2FsZXMKCmBgYHtyfQpjdGxfcGxvdF9hIDwtIGRfY3RsX25vcmV2ICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIk5lZWQgZm9yIENvZ25pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIlNlbnNlIG9mIENvbnRyb2wiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlX25vcmV2LCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4pICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgaGVpZ2h0ID0gMC4xLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInNjb3JlX25vcmV2IiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRiwgZmF0dGVuID0gMikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2l0ZSBkaWZmZXJlbmNlcyBpbiAnY29udHJvbCcgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IE9taXR0aW5nIHJldmVyc2UtY29kZWQgaXRlbXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUgKG5vIHJldmVyc2UtY29kZWQgaXRlbXMpIikKCmN0bF9wbG90X2IgPC0gZF9jdGxfbm9yZXYgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiTmVlZCBmb3IgQ29nbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiU2Vuc2Ugb2YgQ29udHJvbCIpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmVfbm9yZXYiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmVfbm9yZXYsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gLikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiTk9URTogT21pdHRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtc1xuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAobm8gcmV2ZXJzZS1jb2RlZCBpdGVtcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC44LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGN0bF9wbG90X2EsIGN0bF9wbG90X2IsIG5jb2wgPSAyKQpgYGAKCmBgYHtyfQojIGN0bF9wbG90X2MgPC0gZF9jdGwgJT4lCiMgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiMgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIk5lZWQgZm9yIENvZ25pdGlvbiIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiU2Vuc2Ugb2YgQ29udHJvbCIpKSAlPiUKIyAgIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwojICAgZmFjZXRfZ3JpZChzY2FsZSB+IC4pICsKIyAgIGdlb21faml0dGVyKGFscGhhID0gMC4yLCBoZWlnaHQgPSAwLjEsIHNob3cubGVnZW5kID0gRikgKwojICAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JQojICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQojICAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiLCBuYS5ybSA9IFQpICU+JQojICAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAojICAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAojICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGLCBmYXR0ZW4gPSAyKSArCiMgICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKIyAgIGxhYnModGl0bGUgPSAiU2l0ZSBkaWZmZXJlbmNlcyBpbiAnY29udHJvbCcgc2NhbGVzIiwKIyAgICAgICAgc3VidGl0bGUgPSAiTk9URTogSW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKIyAgICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAoaW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIikKIyAKIyBjdGxfcGxvdF9kIDwtIGRfY3RsICU+JQojICAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAojICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJOZWVkIGZvciBDb2duaXRpb24iLAojICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIlNlbnNlIG9mIENvbnRyb2wiKSkgJT4lCiMgICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiMgICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiMgICB1bmdyb3VwKCkgJT4lCiMgICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKIyAgIGZhY2V0X2dyaWQoc2NhbGUgfiAuKSArCiMgICBnZW9tX3BvaW50cmFuZ2UoYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAojICAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwojICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiMgICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKIyAgICAgICAgc3VidGl0bGUgPSAiTk9URTogSW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKIyAgICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAoaW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CiMgcGxvdF9ncmlkKGN0bF9wbG90X2MsIGN0bF9wbG90X2QsIG5jb2wgPSAyKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBPdmVyYWxsIHNjb3JlcwoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKZF9wYXNzX21iIDwtIGQgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUgCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnNjb3Jlc19wbG90X3Bhc3NfYSA8LSBkICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAuMiwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfcGFzc19tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4bHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpzY29yZXNfcGxvdF9wYXNzX2IgPC0gZF9wYXNzX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXhsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMi4yLCBpbmNsdWRlID0gVH0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpwbG90X2dyaWQoc2NvcmVzX3Bsb3RfcGFzc19hLCBzY29yZXNfcGxvdF9wYXNzX2IsIG5jb2wgPSAxKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCmRfYWxsX21iIDwtIGQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lIAogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIpICU+JSAKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpzY29yZXNfcGxvdF9hbGxfYSA8LSBkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLjIsIHdpZHRoID0gMC40LCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX2FsbF9tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnNjb3Jlc19wbG90X2FsbF9iIDwtIGRfYWxsX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMsIGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnBsb3RfZ3JpZChzY29yZXNfcGxvdF9hbGxfYSwgc2NvcmVzX3Bsb3RfYWxsX2IsIG5jb2wgPSAxKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgSGlzdG9ncmFtcyBmb3IgZWFjaCBzY2FsZQoKIyMgQWJzb3JwdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzMiwgMTYpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gYWJzb3JwdGlvbiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTMyKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZHNlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19kc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDM1LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcwLCAzNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19kc2VfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RzZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMzUsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzAsIDM1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gRFNFIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNzApIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBTcGlyaXR1YWwgZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3NlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gNDgsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOTYsIDI0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC05NikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19zZV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3NlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19zZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDQ4LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDk2LCAyNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBTRSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTk2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgV2F5cyBvZiBiZWluZwoKIyMjIEFsbCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3dvYl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfd29iX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zNiwgMzYsIDE4KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM2IHRvIDM2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfd29iX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN193b2JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM2LCAzNiwgMTgpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zNiB0byAzNikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgojIyMgRXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoIl93b2JfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSwgY29udGFpbnMoInJldmVyc2UiKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yOCwgMjgsIDE0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkX2N0bF9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gIndvYiIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjgsIDI4LCAxNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyAoZXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgVW5jb21tb24gZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfdW5ldl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfdW5ldl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA5LCB5ID0gMC4yMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE4LCA5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJVbmNvbW1vbiBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTE4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3VuZXZfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBVTkVWIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBFeHRyYXNlbnNvcnkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2V4c2VuX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2V4c2VuX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4zMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcsIDEpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkV4dHJhc2Vuc29yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBFWFNFTiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIYXJkIHRoaW5raW5nCgojIyMgQWxsIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfaHRoa190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfaHRoa190b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM4LCAzOCwgMTkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM4IHRvIDM4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCiMjIyBFeGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX2h0aGtfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogICAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCAKICAgICAgICAgICAgICBwN19odGhrX2pvYi5kb25lKSkgJT4lIAogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTIwLCAyMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfY3RsX25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiaHRoayIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yMCwgMjAsIDEwKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19wb3JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMyLCAxNikpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTMyKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3Bvcl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfcG9yX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzMiwgMTYpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFBPUiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTMyKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgTWFydGhhIHN0b3J5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTU0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X21tX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gTU0gc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC01NCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFJlbGlhYmlsaXR5CgpgYGB7cn0KYWxwaGFfYnlfY3RyeV9mdW4gPC0gZnVuY3Rpb24oZGYpewogIAogIGRmIDwtIGRmICU+JSAKICAgIHNlbGVjdCgtZW5kc193aXRoKCJfY2F0IiksIC1jb250YWlucygidG90YWwiKSwgLWNvbnRhaW5zKCdjaGVjaycpKQogIAogIGFscGhhX2Z1biA8LSBmdW5jdGlvbihkZil7CiAgICBhbHBoYV9kZiA8LSBwc3ljaDo6YWxwaGEoZGYpCiAgICByYXdfYWxwaGEgPC0gYWxwaGFfZGYkdG90YWxbMV1bXSAlPiUgYXMubnVtZXJpYygpCiAgICByZXR1cm4ocmF3X2FscGhhKQogIH0KICAKICBhIDwtIGMoCiAgICBhbHBoYV91cyA9IGFscGhhX2Z1bihkZiAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX2doID0gYWxwaGFfZnVuKGRmICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1wN19jdHJ5KSksCiAgICBhbHBoYV90aCA9IGFscGhhX2Z1bihkZiAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtcDdfY3RyeSkpLAogICAgYWxwaGFfY2ggPSBhbHBoYV9mdW4oZGYgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX3Z0ID0gYWxwaGFfZnVuKGRmICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX2FsbCA9IGFscGhhX2Z1bihkZiAlPiUgc2VsZWN0KC1wN19jdHJ5KSkpCiAgCiAgcmV0dXJuKGEpCn0KYGBgCgpgYGB7cn0KZF9hbHBoYSA8LSBkYXRhLmZyYW1lKAogIGBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXNgID0gYWxwaGFfYnlfY3RyeV9mdW4oCiAgICBkMCAlPiUgc2VsZWN0KHA3X2N0cnksIGNvbnRhaW5zKCJfZHNlIikpKSwKICBgU3Bpcml0dWFsIEV2ZW50c2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9zZSIpKSAlPiUgcmVtb3ZlX21pc3NpbmcoKSksCiAgYFVuY29tbW9uIEV2ZW50c2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl91bmV2IikpKSwKICBgRXh0cmFzZW5zb3J5YCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX2V4c2VuIikpKSwKICBgQWJzb3JwdGlvbmAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9hYnMiKSkpLAogIGBQb3Jvc2l0eSAoRHVsaW4pYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX3BvciIpKSksCiAgYE1hcnRoYSBTdG9yeWAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9tbSIpKSksCiAgYFdheXMgb2YgYmVpbmdgID0gYWxwaGFfYnlfY3RyeV9mdW4oCiAgICBkMCAlPiUgc2VsZWN0KHA3X2N0cnksIGNvbnRhaW5zKCJfd29iIikpKSwKICBgSGFyZCB0aGlua2luZ2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9odGhrIikpKSwKICBgV2F5cyBvZiBiZWluZyAobm8gcmV2KWAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl93b2IiKSwgLWNvbnRhaW5zKCJyZXZlcnNlIikpKSwKICBgSGFyZCB0aGlua2luZyAobm8gcmV2KWAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9odGhrIiksIAogICAgICAgICAgICAgICAgICAtYygicDdfaHRoa19ub3QuZnVuIiwgInA3X2h0aGtfbGlsLmNoYWxsZW5nIiwgCiAgICAgICAgICAgICAgICAgICAgICJwN19odGhrX2F2b2lkLnRoaW5rIiwgInA3X2h0aGtfaHJkLmhhdi50byIsIAogICAgICAgICAgICAgICAgICAgICAicDdfaHRoa19zbWFsLmRhaWx5IiwgInA3X2h0aGtfbGlsLnRob3VnaHQiLAogICAgICAgICAgICAgICAgICAgICAicDdfaHRoa19ub3QuZXhjaXRpbmciLCAicDdfaHRoa19tZW50YWwuZWZmcnQiLAogICAgICAgICAgICAgICAgICAgICAicDdfaHRoa19qb2IuZG9uZSIpKSkpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic2FtcGxlIikgJT4lCiAgZ2F0aGVyKHNjYWxlLCByYXdfYWxwaGEsIC1zYW1wbGUpICU+JQogIG11dGF0ZShzYW1wbGUgPSAKICAgICAgICAgICByZWNvZGVfZmFjdG9yKGdzdWIoImFscGhhXyIsICIiLCBzYW1wbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgInVzIiA9ICJVUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZ2giID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ0aCIgPSAiVGhhaWxhbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgImNoIiA9ICJDaGluYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAidnQiID0gIlZhbnVhdHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIgPSAiT1ZFUkFMTCIpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIlxcLlxcLiQiLCAiKSIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJcXC5cXC4iLCAiICgiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXFwuJCIsICIpIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIlxcLiIsICIgIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmNvbW1vbiBFdmVudHMiLCAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWJzb3JwdGlvbiIsICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFydGhhIFN0b3J5IiwgIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXlzIG9mIGJlaW5nIChubyByZXYpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFyZCB0aGlua2luZyIsICJIYXJkIHRoaW5raW5nIChubyByZXYpIikpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9hbHBoYSAlPiUKICBtdXRhdGUoc2NvcGUgPSBpZmVsc2Uoc2FtcGxlID09ICJPVkVSQUxMIiwgInNpdGUiLCAib3ZlcmFsbCIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzYW1wbGUsIHkgPSByYXdfYWxwaGEsICBjb2xvciA9IHNhbXBsZSwgCiAgICAgICAgICAgICBzaGFwZSA9IHNjb3BlLCBzaXplID0gc2NvcGUpKSArCiAgZmFjZXRfd3JhcCh+IHNjYWxlLCBuY29sID0gNikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuOCwgbHR5ID0gMikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNywgbHR5ID0gMiwgY29sb3IgPSAiZ3JheSIpICsKICBnZW9tX3BvaW50KHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoMiwgNCkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNiwgMTgpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSkpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlJlbGlhYmlsaXR5IGJ5IHNpdGUgYW5kIG92ZXJhbGwiLAogICAgICAgc3VidGl0bGUgPSAiQ3JvbmJhY2gncyBhbHBoYSA9IDAuOCAoYmxhY2sgZG90dGVkIGxpbmUpIGlzIGEgY2xhc3NpYyBjdXRvZmYgZm9yICd2ZXJ5IGdvb2QnIHJlbGlhYmlsaXR5O1xuaW4gcHJhY3RpY2UsIGFscGhhIDwgMC43IChncmF5IGRvdHRlZCBsaW5lKSBpcyBvZnRlbiBjb25zaWRlcmVkIHByb2JsZW1hdGljIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiQ3JvbmJhY2gncyBhbHBoYSAocmFuZ2U6IDAtMSkiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgQ29ycmVsYXRpb25zCgpgYGB7cn0KIyBGSVJTVCBUV08gQVJFIEVRVUlWQUxFTlQhCgojIHJlc19jb3IgPC0gZDAgJT4lCiMgICBzZWxlY3QoY29udGFpbnMoInRvdGFsIikpICU+JQojICAgcmVuYW1lX2FsbChmdW5zKGdzdWIoInA3XyIsICIiLCAuKSkpICU+JQojICAgcmVuYW1lX2FsbChmdW5zKGdzdWIoIl90b3RhbCIsICIiLCAuKSkpICU+JQojICAgY29yLmNpKHBsb3QgPSBGKQoKcmVzX2NvciA8LSBkX3N0ZCAlPiUKICBzZWxlY3QoLWNvbnRhaW5zKCJwN18iKSkgJT4lCiAgY29yLmNpKHBsb3QgPSBGKQoKIyByZXNfY29yIDwtIGRfc3RkX2J5c2l0ZSAlPiUKIyAgIHNlbGVjdCgtY29udGFpbnMoInA3XyIpKSAlPiUKIyAgIGNvci5jaShwbG90ID0gRikKCmRfY29yIDwtIHJlc19jb3IkcmhvICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInYxIikgJT4lCiAgZ2F0aGVyKHYyLCByLCAtdjEpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfYXQodmFycyh2MSwgdjIpLCAKICAgICAgICAgICAgZnVucyhyZWNvZGVfZmFjdG9yKC4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgQmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciKSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX2NvciAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2MSwgeSA9IHYyLCBmaWxsID0gciwKICAgICAgICAgICAgIGxhYmVsID0gZm9ybWF0KHJvdW5kKHIsIDIpLCBuc21hbGwgPSAyKSkpICsKICBnZW9tX3RpbGUoKSArCiAgZ2VvbV90ZXh0KCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcigiUGVhcnNvbidzIHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDEpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsKICBsYWJzKHRpdGxlID0gIkNvcnJlbGF0aW9ucyBiZXR3ZWVuIG1lYXN1cmVzIGluY2x1ZGVkIGluIFBhY2tldCA3IikgIywKICAgICAgICMgc3VidGl0bGUgPSAiQWZ0ZXIgc3RhbmRhcmRpemluZyBlYWNoIG1lYXN1cmUgd2l0aGluIHNpdGUiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgRGVtb2dyYXBoaWNzCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBbGwgcGFydGljaXBhbnRzIikKZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX3NleCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgY291bnQocDdfZGVtX3NleCkgJT4lCiAgbXV0YXRlKHByb3AgPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChwN19kZW1fc2V4LCBwcm9wKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fc2V4KSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBjb3VudChwN19kZW1fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHA3X2RlbV9zZXgsIHByb3ApCmBgYAoKSW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhIF92ZXJ5XyBzdWJzdGFudGlhbCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgd2VyZSBmZW1hbGUsIGFuZCBhIHNsaWdodCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVmFudWF0dSB3ZXJlIGZlbWFsZS4KCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCgo=